更新時間:2020-05-14 14:26:23 來源:動力節點 瀏覽2367次
PL/SQL動態執行DDL語句
PL/SQL程序中可以執行DML語句和事物控制等語句,如經常用到selectinto進行但賦值語句,但是直接執行DDL語句(createtable等操作)是不可以的,但是可以通過動態SQL語句執行,間接到達執行DDL操作的目的。
PL/SQL程序是通過PL/SQL執行時,把SQL語句當做字符串的形式傳給動態SQL執行語句執行。動態SQL語句的寫法如下:
EXECUTEIMMEDIATE動態SQL語句
[into變量列表]
[using參數列表]
語法解析:
如果動態SQL語句是SELECT語句,可以把查詢的結果保存到INTO后面的變量中。如果動態語句中存在參數,USING為SQL語句中的參數傳值。動態SQL中的參數格式是:[:參數名],參數在運行時需要使用USING傳值。下面我們通過案例代碼分析動態SQL語句的寫法。
案例1、利用動態語句創建學生信息表的備份表(stuinfo_201812):
declare
sql_yjvarchar(500);--動態SQL執行的語句
begin
sql_yj:='createtableSTUINFO_201812
(
stuidVARCHAR2(11),
stunameVARCHAR2(50),
sexCHAR(1),
ageNUMBER(2),
classnoVARCHAR2(7),
stuaddressVARCHAR2(100),
gradeCHAR(4),
enroldateDATE,
idnumberVARCHAR2(18)
)';
--利用動態語句創建學生備份表(stuinfo_201812)
executeimmediatesql_yj;
end;
結果如下:
案例2、給備份表插入一個學生信息,代碼如下:
declare
sql_yjvarchar(500);--動態SQL執行的語句
ls_stuidVARCHAR2(11);
ls_stunameVARCHAR2(50);
ls_sexCHAR(1);
ls_ageNUMBER(2);
begin
--查詢出學生信息表中學生"張三豐"的基本信息
selectt.stuid,t.stuname,t.sex,t.age
intols_stuid,ls_stuname,ls_sex,ls_age
fromstuinfotwheret.stuid='SC201801006';
--利用動態語句執行插入操作,插入“張三豐”的信息
sql_yj:='insertintostuinfo_201812values(:1,:2,:3,:4,null,null,null,null,null)';
executeimmediatesql_yjusingls_stuid,ls_stuname,ls_sex,ls_age;
end;
結果如下:
案例3、利用動態SQL語句查詢出剛剛插入的學生信息:
declare
sql_yjvarchar(500);--動態SQL執行的語句
ls_stuinfostuinfo%rowtype;
ls_stuidVARCHAR2(11);
ls_stunameVARCHAR2(50);
ls_sexCHAR(1);
ls_ageNUMBER(2);
begin
--查詢出學生信息表中學生"張三豐"的基本信息
selectt.stuid,t.stuname,t.sex,t.age
intols_stuid,ls_stuname,ls_sex,ls_age
fromstuinfot
wheret.stuid='SC201801006';
--利用動態語句查詢獲取"張三豐"的信息
sql_yj:='select*fromstuinfo_201812wherestuid=:1';
executeimmediatesql_yjintols_stuinfousingls_stuid;
dbms_output.put_line('學號:'||ls_stuinfo.stuid||'姓名:'
||ls_stuinfo.stuname||'性別:'||ls_stuinfo.sex||'年齡:'||ls_stuinfo.age);
end;
結果如下:
總結:PL/SQL動態執行SQL語句,是先進行解析編譯后,執行后再傳入參數進行執行,因此,動態SQL有一個優勢就是綁定變量,只需一次解析,假如是一個SQL操作where條件后的值經常變換,而且經常用到,可以考慮使用Oracle動態執行SQL。因為,Oracle中SQL語句是通過SGA共享池進行緩存的,下次再次執行該SQL語句,直接從緩存當中取出,提高執行效率,減少Oracle數據庫負擔,不然,隨著每次變量值的不同,Oracle把他當作不同的SQL語句,進行再次預解析,會大大加大數據庫負擔。
以上就是動力節點java培訓機構的小編針對“Java數據庫編程視頻,Oracle動態執行SQL語句”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
Java數據庫免費視頻教程
老杜最新MySQL教程:http://m.dabaquan.cn/javavideo/111.html
老杜最新JDBC教程:http://m.dabaquan.cn/javavideo/112.html
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習