1. 程式人生 > >oracle 中的多個逗號轉譯問題

oracle 中的多個逗號轉譯問題

在儲存過程中經常要列印例如‘a’,a等,需要加逗號有時候是‘’‘||a||’ ”,有時候是’||a||‘,經常搞不清楚。今天終於研究清楚了。

新建一個sql介面
(1)
begin

Dbms_Output.put_line(1 );

end;
這時候打印出來的是 1 number型
(2)
begin

Dbms_Output.put_line(‘1’);

end;
這時候打印出來還是1,但是是varchar型
(3)如果我要列印’1’了?
begin

Dbms_Output.put_line(””||1||””);

end;
這時候打印出來是 ‘1’ ,varchar。明白沒?
(4)
begin

Dbms_Output.put_line(’ ‘||1||’ ‘);

end;
這時候打印出來是 1 注意,有空格了(部落格顯示排版不大清楚,你們自己試驗一下)
好了開始總結
在oracle中 ’ ‘用兩個逗號圈起的區域就是一個轉譯的過程,就是告訴大家中的部分是個字元型,例如(2)中將數字型1轉譯成字元型1。
(4)中將中間的空格轉譯成字元打印出。
而在(3)中有4個逗號,標號為1234,
1和4逗號告訴大家中間的是字元型,而逗號2 為轉譯字元,告訴大家逗號3是個逗號。

轉義無非是兩種情況:1:將普通字元轉為特殊用途,一般是程式語言中,用於表示不能直接顯示的字元,比如後退鍵,回車鍵,等。2:用來將特殊意義的字元轉換回它原來的意義。

再說個儲存過程中的語句
儲存過程中例如
select a.cell_1 into 一個變數val from TB_一個表 a ;
這樣是可以的
但是update,insert等是不可以的,要用動態語句,例如
str_sql :=’merge into ’ ||TB_A||’ c
using ‘||TB_B||’ d
on (c.’||com_CELL||’=d.’||com_CELL||’)
when matched then
update set c.’||CELL_A||’=d.’||CELL_B||’ ,c.MOD_COND=”’||MOD_COND||””;

Dbms_Output.put_line(str_sql);
–執行語句
execute immediate str_sql;
為什麼了?
因為整個儲存過程是一個事務,事務是要開闢記憶體去解決的,一個事務的中間是不允許存在其他事務的,除非你告訴電腦oracle我還要在事務中開闢一個事務。
簡單的說就是,儲存過程中如果出現需要改變記憶體,開闢硬體的情況就需要通過sql:=’……………………………..’這種形式告訴電腦,然後輸出。像select,設定變數等無需改變表的記憶體,但是一旦對一個表插入資料,更新資料,等,就需要動態語句執行。