锘??xml version="1.0" encoding="utf-8" standalone="yes"?> a. 浜ゅ弶榪炴帴CROSS JOIN
濡傛灉涓嶅甫WHERE鏉′歡瀛愬彞錛屽畠?yōu)畣浼?xì)榪斿洖琚繛鎺ョ殑涓や釜琛ㄧ殑絎涘崱灝?dāng)绉Q岃繑鍥炵粨鏋滅殑琛屾暟絳変簬涓や釜琛ㄨ鏁扮殑涔樼Н錛?/font>
涓句緥,涓嬪垪A銆丅銆?span>C
A:SELECT * FROM table1 CROSS JOIN table2
B:SELECT * FROM table1,table2
C:select * from table1 a inner join table2 b
A:select a.*,b.* from table1 a,table2 b where a.id=b.id
B:select * from table1 a cross join table2 b where a.id=b.id (娉細(xì)cross join鍚庡姞鏉′歡鍙兘鐢╳here,涓嶈兘鐢╫n)
C:select * from table1 a inner join table2 b on a.id=b.id
涓鑸笉寤鴻浣跨敤鏂規(guī)硶A鍜孊錛屽洜涓哄鏋滄湁WHERE瀛愬彞鐨勮瘽錛屽線寰浼?xì)鍏堢敓鎴愪袱涓〃琛屾曨C箻縐殑琛岀殑鏁版嵁琛ㄧ劧鍚庢墠鏍規(guī)嵁WHERE鏉′歡浠庝腑閫夋嫨銆?/span>
鍥犳錛屽鏋滀袱涓渶瑕佹眰浜ら檯鐨勮〃澶ぇ錛屽皢浼?xì)闈炲笖R潪甯告參錛屼笉寤鴻浣跨敤銆?/font>
b. 鍐呰繛鎺?/font>INNER JOIN
涓よ竟琛ㄥ悓鏃剁鍚堟潯浠剁殑緇勫悎
濡傛灉浠呬粎浣跨敤
SELECT * FROM table1 INNER JOIN table2
鍐呰繛鎺ュ鏋滄病鏈夋寚瀹氳繛鎺ユ潯浠剁殑璇濓紝鍜岀瑳鍗″皵縐殑浜ゅ弶榪炴帴緇撴灉涓鏍鳳紝浣嗘槸涓嶅悓浜庣瑳鍗″皵縐殑鍦版柟鏄紝娌℃湁絎涘崱灝?dāng)绉偅涔堝鏉傝鍏堢敓鎴愯鏁颁箻绉殑鏁版嵁琛ㄥQ屽唴榪炴帴鐨勬晥鐜囪楂樹簬絎涘崱灝?dāng)绉殑浜ゅ弶杩炴帴銆?/font>
浣嗘槸閫氬父鎯呭喌涓嬶紝浣跨敤INNER JOIN闇瑕佹寚瀹氳繛鎺ユ潯浠躲?/font>
***************鍏充簬絳夊艱繛鎺ュ拰鑷劧榪炴帴
絳夊艱繛鎺?span>(=鍙峰簲鐢ㄤ簬榪炴帴鏉′歡, 涓嶄細(xì)鍘婚櫎閲嶅鐨勫垪)
鑷劧榪炴帴(浼?xì)鍘婚櫎閲嶅鐨勫?
鏁版嵁搴撶殑榪炴帴榪愮畻閮芥槸鑷劧榪炴帴錛屽洜涓轟笉鍏佽鏈夐噸澶嶇殑琛岋紙鍏冪粍錛夊瓨鍦ㄣ?/font>
渚嬪錛?/font>
SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
c. 澶栬繛鎺?/font>OUTER JOIN
鎸囧畾鏉′歡鐨勫唴榪炴帴錛屼粎浠呰繑鍥炵鍚堣繛鎺ユ潯浠剁殑鏉$洰銆?/font>
澶栬繛鎺ュ垯涓嶅悓錛岃繑鍥炵殑緇撴灉涓嶄粎鍖呭惈絎﹀悎榪炴帴鏉′歡鐨勮錛岃屼笖鍖呮嫭宸﹁〃(宸﹀榪炴帴鏃?span>), 鍙寵〃(鍙寵繛鎺ユ椂)鎴栬呬袱杈硅繛鎺?鍏ㄥ榪炴帴鏃?鐨勬墍鏈夋暟鎹銆?/font>
1)宸﹀榪炴帴LEFT [OUTER] JOIN
鏄劇ず絎﹀悎鏉′歡鐨勬暟鎹錛屽悓鏃舵樉紺哄乏杈規(guī)暟鎹〃涓嶇鍚堟潯浠剁殑鏁版嵁琛岋紝鍙寵竟娌℃湁瀵瑰簲鐨勬潯鐩樉紺?/font>NULL
渚嬪
SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column
2)鍙沖榪炴帴RIGHT [OUTER] JOIN
鏄劇ず絎﹀悎鏉′歡鐨勬暟鎹錛屽悓鏃舵樉紺哄彸杈規(guī)暟鎹〃涓嶇鍚堟潯浠剁殑鏁版嵁琛岋紝宸﹁竟娌℃湁瀵瑰簲鐨勬潯鐩樉紺?/font>NULL
渚嬪
SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column
3)鍏ㄥ榪炴帴full [outer] join
鏄劇ず絎﹀悎鏉′歡鐨勬暟鎹錛屽悓鏃舵樉紺哄乏鍙充笉絎﹀悎鏉′歡鐨勬暟鎹錛岀浉搴旂殑宸﹀彸涓よ竟鏄劇ずNULL錛屽嵆鏄劇ず宸﹁繛鎺ャ佸彸榪炴帴鍜屽唴榪炴帴鐨勫茍闆?br />
鏂囩珷鏉ユ簮錛?br />
鍏?涓?/p>
涓.鍙湁杈撳叆鍙傛暟娌℃湁榪斿洖緇撴灉鐨勫瓨鍌ㄨ繃紼?/p>
浜? 鏈夎緭鍏ュ拰鏈変竴涓繑鍥炲肩殑瀛樺偍榪囩▼
涓夈佽繑鍥炲琛岃褰曠殑瀛樺偍榪囩▼錛堣繑鍥炵殑鏄父鏍囷級(jí)
鍥涖丠ibernate璋冪敤oracle瀛樺偍榪囩▼
涓.鍙湁杈撳叆鍙傛暟娌℃湁榪斿洖緇撴灉鐨勫瓨鍌ㄨ繃紼?/p>
寤鴻〃 create table table_1(id varchar2(10),name varchar2(10));
--娌℃湁榪斿洖鍊肩殑瀛樺偍榪囩▼
create or replace procedure prc_1(t_id in varchar2,t_name in varchar2)
as
begin
insert into table_1 values(t_id,t_name);
end prc_1;
1.鍦╯ql plus 涓墽琛?br />SQL> exec prc_1('1','鏉?');
PL/SQL procedure successfully completed
2. 鍦╦ava 涓墽琛岋紝榪斿洖緇撴灉
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_1(?,?) }");
cstmt.setString(1, "100");
cstmt.setString(2, "TestOne");
cstmt.execute();
conn.commit();
========================================
浜? 鏈夎緭鍏ュ拰鏈変竴涓繑鍥炲肩殑瀛樺偍榪囩▼
--鏈変竴涓繑鍥炲肩殑瀛樺偍榪囩▼
create or replace procedure prc_2(t_id IN VARCHAR2,t_name OUT VARCHAR2) AS
begin
SELECT name INTO t_name FROM table_1 WHERE id= t_id and rownum<2;
end prc_2;
1. 鍦╯ql plus涓墽琛岋紝榪斿洖緇撴灉
SQL> var name varchar2(100);
SQL> exec prc_2('1',:name);
PL/SQL procedure successfully completed
name
---------
鏉?
2. 鍦╦ava 涓墽琛岋紝榪斿洖緇撴灉
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_2(?,?) }");
cstmt.setString(1, "1");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
conn.commit();
String testPrint = cstmt.getString(2);
System.out.println("榪斿洖鍊鹼細(xì)錛氾細(xì)錛氾細(xì)錛?" + testPrint);
杈撳嚭錛?br />榪斿洖鍊鹼細(xì)錛氾細(xì)錛氾細(xì)錛?鏉?
涓夈佽繑鍥炲琛岃褰曠殑瀛樺偍榪囩▼錛堣繑鍥炵殑鏄父鏍囷級(jí)
鐢變簬oracle瀛樺偍榪囩▼娌℃湁榪斿洖鍊鹼紝瀹冪殑鎵鏈夎繑鍥炲奸兘鏄氳繃out鍙傛暟鏉ユ浛浠g殑錛屽垪琛ㄥ悓鏍蜂篃涓嶄緥澶栵紝浣嗙敱浜庢槸闆嗗悎錛屾墍浠ヤ笉鑳界敤涓鑸殑鍙傛暟錛屽繀欏昏鐢╬agkage浜?鎵浠ヨ鍒嗕袱閮ㄥ垎錛?/p>
1錛?nbsp; 寤轟竴涓▼搴忓寘銆?br />create or replace package test_package as
type test_CURSOR is ref cursor;
end test_package;
2錛屽緩绔嬪瓨鍌ㄨ繃紼嬶紝瀛樺偍榪囩▼涓猴細(xì)
create or replace procedure prc_3(p_CURSOR out test_package.test_CURSOR) is
begin
OPEN p_CURSOR FOR SELECT * FROM table_1 order by id;
end prc_3;
鍙互鐪嬪埌錛屽畠鏄妸娓告爣錛堝彲浠ョ悊瑙d負(fù)涓涓寚閽堬級(jí)錛屼綔涓轟竴涓猳ut 鍙傛暟鏉ヨ繑鍥炲肩殑銆?/p>
===========================
3.鍦╦ava涓殑鎵ц
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
cstmt = conn.prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
杈撳嚭緇撴灉錛?br /><tr><td>1</td><td>鏉?</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>100</td><td>鏉?</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>200</td><td>Test2</td></tr>
4.鍦╯ql plus涓墽琛?br />鐢ㄤ竴涓瓨鍌ㄨ繃紼嬭皟鐢╬rc_3
create or replace procedure prc_4 is
c test_package.test_CURSOR;
id varchar2(100);
name varchar2(100);
begin
prc_3(c);
LOOP
FETCH c INTO id,name;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('=='||id||'==='||name);
END LOOP;
CLOSE c;
end prc_4;
鎵ц
SQL> set serveroutput on;
SQL> exec dbms_output.enable(999999999999999999999);
PL/SQL procedure successfully completed
SQL> exec prc_4;
==1===鏉?
==100===TestOne
==100===鏉?
==100===TestOne
==200===Test2
PL/SQL procedure successfully completed
鍥涖丠ibernate璋冪敤oracle瀛樺偍榪囩▼
private void prc_test()
{
getHibernateTemplate().execute(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
CallableStatement cstmt = session.connection().prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
return null;
}
}, true);
}
鏂囩珷鏉ユ簮錛?/p>http://dolphin-ygj.iteye.com/blog/436936