--無繫結變數的非sql查詢
declare
v_sql varchar2(4000);
begin --使用execute immediate執行動態sql,最後提交事物
v_sql := 'create table account('||' id number(3) not null,'||
'name varchar2(50) not null,'||' balance number(8,2) not null,'||
' btime date not null)';
execute immediate v_sql;
v_sql :='insert into account (id,name,balance,btime)'||
' values (1,''張三'',2000.1,to_date(''12-02-2008'',''dd-mm-yyyy''))';
execute immediate v_sql;
v_sql :='insert into account (id,name,balance,btime)'||
' values (2,''李四'',530,to_date(''10-12-2008'',''dd-mm-yyyy''))';
execute immediate v_sql;
v_sql :='insert into account (id,name,balance,btime)'||
' values (3,''王五'',1631,to_date(''11-05-2007'',''dd-mm-yyyy''))';
execute immediate v_sql;
v_sql :='insert into account (id,name,balance,btime)'||
' values (4,''小強'',910.3,to_date(''12-04-2008'',''dd-mm-yyyy''))';
execute immediate v_sql;
v_sql :='insert into account (id,name,balance,btime)'||
' values (5,''小周'',8700,to_date(''11-11-2008'',''dd-mm-yyyy''))';
execute immediate v_sql;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
drop table account
--帶固定數目繫結變數的非sql查詢
declare
v_sql varchar2(4000);
v_balance account.balance%type;
v_name account.name%type;
begin --使用excute immediate語句執行sql字串,使用using將繫結變數與輸入的id和賬戶金額進行繫結,
--將更新後的賬戶名稱與賬戶餘額返回到變數中
v_sql := 'update account set balance=:balance where id=:id'||
' returning name,balance into:1,:2';
execute immediate v_sql
using &balance,&id --把繫結引數的值傳給繫結變數在sql語句中分別有指定
returning into v_name, v_balance; --返回的資料傳給兩個定義變數
if sql%notfound then --假如沒找到就丟擲乙個異常
end if;
commit;
dbms_output.put_line(v_name || ' ' || v_balance);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
--帶固定數目列和繫結變數的sql查詢
declare
type account_table_type is table of account%rowtype index by binary_integer;
account_table account_table_type;
account_cursor sys_refcursor;
v_sql varchar2(4000);
begin
v_sql := 'select * from account where to_char(btime,''yyyy'') = :year'; --通過年份使用繫結變數
open account_cursor for v_sql using &year; --open。。for執行sql字串,使用using進行變數繫結
fetch account_cursor bulk collect into account_table; --執行下一條
if account_table.count = 0 then --集合長度等於0就丟擲異常
end if;
for i in 1..account_table.count loop --把集合中內容列印出來
dbms_output.put_line(account_table(i).name || ' ' || account_table(i).balance);
end loop;
close account_cursor; --關閉游標
exception
when others then
dbms_output.put_line(sqlerrm);
end;
oracle動態sql以及繫結變數
實現動態sql有兩種方式 dbms sql和本地動態sql execute immeidate oracle從8代開始就提供了新的執行動態sql的功能 execute immeidate v sql using into 本地動態sql execute immediate 語句 into using...
oracle動態SQL繫結集合變數
有如下需求,在儲存過程中,傳遞的引數是字串,字串格式是 1,2,3 由數字組成,中間用 號分割 然後在sql語句如下使用 create or replace procedure movetoright v ids varchar2,v workid int asi sql varchar2 1000...
SQL Server動態SQL與變數繫結
有時候動態sql需要進行變數的賦值,這個時候就需要呼叫系統的儲存過程sp executesql了。使用中還是有些注意事項,如下 字元型字段需宣告為nvarchar型別 declare strsql nvarchar 1000 value str nvarchar 254 動態sql拼接 set st...