亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle實現動態SQL的拼裝要領

2024-08-29 13:58:07
字體:
來源:轉載
供稿:網友

雖說Oracle的動態SQL語句使用起來確實很方便,但是其拼裝過程卻太麻煩。尤其在拼裝語句中涉及到date類型字段時,拼裝時要加to_char先轉換成字符,到了sql中又要使用to_date轉成date類型和原字段再比較。

例如有這樣一個SQL語句:

select '========= and (t.created>=to_date('''||to_char(sysdate,'yyyy-mm-dd')||''',''yyyy-mm-dd'') AND t.created< to_date('''||to_char(sysdate+1,'yyyy-mm-dd')||''',''yyyy-mm-dd''))' from dual;

它就是將sysdate轉成字符串,再在生成的SQL中將字符串轉換成date。

其拼裝出來的結果如下:

========= and (t.created>=to_date('2012-11-08','yyyy-mm-dd') AND t.created< to_date('2012-11-09','yyyy-mm-dd'))

字符串2012-11-08是我們使用to_char(sysdate,'yyyy-mm-dd')生成的,語句中涉及到的每一個單引號,都要寫成兩個單引號來轉義。

雖然拼裝過程很煩人,但只要掌握好三點,就應能拼裝出能用的SQL語句。

一、先確定目標。應保證拼裝出來的SQL應該是什么樣子,然后再去配置那個動態SQL

二、拼裝SQL的時候,所有使用連接符||連接的對象都應是varchar2類型,這種類型的對象以單引號開頭,以單引號結尾。數字會自動轉,但date需要我們手工使用to_char函數轉。

三、遇到有引號的,就寫成兩個單引號。

如 ' I am a SQL developer '' '||v_name||' '' in China. telephone is '||v_number||' .'

v_name是字符型的,所以拼裝它是需要前后加單引號。

這種轉換很煩人,但從10g開始有一個新功能,可以讓人不用這么煩。它就是q'[xxxxx]'

示例如下:

select q'[ I'm a SQL developer ' ]'||to_char(sysdate,'yyyy')||q'[' in China. telephone is ]'||1990||'.' from dual;

結果如下:

I'm a SQL developer '2012' in China. telephone is 1990.

I'm使用一個單引號在q'[]'中就可以。
to_char(sysdate,'yyyy')轉成的是2012,前后是要加單引號的。所以在q'[xxx ']'的結尾加了一個單引號。
這樣就使得我們不用想以前那樣使用 ''''表示一個單引號了。

簡而言之,掌握這三點,就應該能拼裝出能用的SQL。至于如果使用綁定變量輸入輸出,則需要使用into using關鍵字。 

set serveroutput on; declareincoming date:=sysdate-10;outgoing int;beginexecute immediate 'select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ;dbms_output.put_line(' count is: ' || outgoing);end;

使用using的好處,就是不用去轉date類型為varchar類型,再轉回去date類型這種繁瑣的操作。

SQL代碼如下: 

declareincoming date:=sysdate-10;outgoing int;beginexecute immediate 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ;dbms_output.put_line(' count is: ' || outgoing);end;

ORA-01007: 變量不在選擇列表中
ORA-06512: 在 line 6
 
tom這樣解釋這個錯誤:Followup    November 24, 2004 - 7am Central time zone:
 you have to use DBMS_SQL when the number of outputs is not known until run time.
 
Sql代碼如下:

declare v_cursor number; --定義游標 v_string varchar2(2999); v_row number; begin v_string := 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming';--操作語句,其中:name是語句運行時才確定值的變量 v_cursor:=dbms_sql.open_cursor;--打開處理游標 dbms_sql.parse(v_cursor,v_string,dbms_sql.native);--解釋語句 dbms_sql.bind_variable(v_cursor,':incoming',sysdate-30); --給變量賦值 v_row := dbms_sql.execute(v_cursor);--執行語句 dbms_sql.close_cursor(v_cursor);--關閉游標 --dbms_output.put_line(v_row); commit; exception when others then dbms_sql.close_cursor(v_cursor); --關閉游標 rollback; end;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久av| 成人h猎奇视频网站| 日韩精品高清在线观看| 日韩精品中文字幕在线播放| 亚洲国产小视频在线观看| 91久久久久久久久久久| 国产欧美韩国高清| 国产一区二区久久精品| 一区二区三区回区在观看免费视频| 日韩精品中文字幕在线| 久久精品视频在线播放| 久久激情五月丁香伊人| 亚洲精品国偷自产在线99热| 亚洲国产天堂久久综合网| 92看片淫黄大片欧美看国产片| 亚洲精品成人久久久| 国产精品久久色| 亚洲精品中文字幕有码专区| 国内精品在线一区| 久久亚洲精品成人| 亚洲美女在线观看| 91久久中文字幕| 欧美野外猛男的大粗鳮| 国产成人短视频| 日韩一区二区av| 国产一区二中文字幕在线看| 欧美极度另类性三渗透| 欧美在线性爱视频| 韩曰欧美视频免费观看| 欧美午夜视频一区二区| 亚洲美女福利视频网站| 欧美精品在线视频观看| 日本精品久久久久久久| 欧美视频专区一二在线观看| 欧美日韩免费在线观看| 伊人久久精品视频| 欧美激情一二三| 国产亚洲精品日韩| 国产成人在线视频| 久久影视三级福利片| 欧美富婆性猛交| 日韩国产精品亚洲а∨天堂免| 色播久久人人爽人人爽人人片视av| 久久中文精品视频| 性欧美xxxx视频在线观看| 91成人天堂久久成人| 欧美巨乳美女视频| 亚洲欧洲在线视频| 国产suv精品一区二区| 色偷偷噜噜噜亚洲男人的天堂| 永久免费看mv网站入口亚洲| 中文国产成人精品| 国产精品福利在线观看| 午夜精品一区二区三区视频免费看| 成人免费网站在线| 久久艳片www.17c.com| 欧美国产日韩中文字幕在线| 午夜精品久久久久久99热| 国产精品第七十二页| 久久噜噜噜精品国产亚洲综合| 国产成人精品综合| 亚洲风情亚aⅴ在线发布| 国产69精品99久久久久久宅男| 精品中文字幕在线观看| 亚洲免费视频观看| 亚洲激情在线观看视频免费| 日韩激情在线视频| 成人欧美一区二区三区黑人| 日韩精品在线免费播放| 欧美尤物巨大精品爽| 久久久精品日本| 国产精品偷伦免费视频观看的| 国内久久久精品| 91精品国产综合久久香蕉| 亚洲第一福利网| 色悠悠久久88| 欧美专区国产专区| 国产精品美女免费看| 国产在线观看一区二区三区| 夜夜嗨av色综合久久久综合网| 亚洲国产欧美在线成人app| 亚洲第一男人av| 一区二区三区美女xx视频| 欧美高清视频在线| 日韩av在线网站| 国产精品嫩草影院久久久| 亚洲少妇中文在线| 亚洲国产精品va在线| 一区二区中文字幕| 国产精品成熟老女人| 亚洲精品网址在线观看| 亚洲成人久久一区| 国产成人一区二| 亚洲国产精品成人va在线观看| 国产精品69久久| 日韩精品免费综合视频在线播放| 精品精品国产国产自在线| 欧美性视频精品| 中文字幕不卡在线视频极品| 亚洲国产三级网| 国产69久久精品成人| 欧美国产日韩视频| 国产一区二区三区高清在线观看| 美日韩精品免费观看视频| 亚洲电影在线观看| 国产在线观看91精品一区| 日韩在线视频国产| 日韩亚洲国产中文字幕| 国产欧美欧洲在线观看| 久久久久久久久久久91| 中文字幕日韩欧美| 国产综合在线视频| 91久久在线播放| 清纯唯美亚洲激情| 日韩视频免费看| 亚洲国产精品久久久| 成人激情av在线| 久久精品电影网| 国产一区二区三区视频在线观看| 亚洲乱码一区二区| 一区二区亚洲欧洲国产日韩| 97久久久免费福利网址| 欧美亚洲午夜视频在线观看| 久久激情五月丁香伊人| 欧美电影第一页| 国产精品久久久久久久久久99| 91天堂在线观看| 日韩中文字幕免费看| 久久久久久噜噜噜久久久精品| 国产欧美精品日韩精品| 上原亚衣av一区二区三区| 国产日韩在线精品av| 中文字幕一区二区三区电影| 久久大大胆人体| 尤物yw午夜国产精品视频明星| 欧美亚洲成人网| 日韩中文视频免费在线观看| 91精品久久久久久久久久久久久| 日韩中文在线中文网三级| 日韩激情av在线免费观看| 欧美久久精品一级黑人c片| 78m国产成人精品视频| 欧美成人免费小视频| 日本国产一区二区三区| 久久久久在线观看| 久久久综合免费视频| 色偷偷噜噜噜亚洲男人的天堂| 久久久久久久久久久亚洲| 精品国模在线视频| 久久久伊人日本| 在线播放日韩专区| 久久综合伊人77777蜜臀| 亚洲精品久久久久久久久久久| 欧美成人免费观看| 黄色成人av在线| xxx成人少妇69| 日本亚洲欧洲色α| 456亚洲影院| 久久久欧美一区二区| 亚洲精品自拍偷拍| 日日噜噜噜夜夜爽亚洲精品| 欧美色播在线播放| 欧美精品性视频| 久久久亚洲精选|