[英]PL SQL Dynamic SQL
我想創建PL / SQL函數來接收表名,列名和條件,然后從表中返回一個值,該表的名稱已在參數中傳遞。
我創建了這樣的功能:
create or replace function get_dynamic
(tbl_name nvarchar2,col_name nvarchar2 ,cond nvarchar2 )
return nvarchar2 is
res nvarchar2(30);
code varchar2(500):='begin select :col_name into :res from :tbl_name where :cond; end;';
begin
EXECUTE IMMEDIATE code using in col_name , out res , in tbl_name, in cond;
return res;
end;
使用此代碼調用函數時創建的函數沒有任何問題, 但是 :
begin
DBMS_OUTPUT.PUT_LINE(get_dynamic('EMPLOYEES', 'FIRST_NAME', 'EMPLOYEE_ID=100'));
end;
我得到他的錯誤:
ERROR at line 1:
ORA-06550: line 1, column 51:
PL/SQL: ORA-00903: invalid table name ORA-06550: line 1, column 7:
PL/SQL: SQL Statement ignored ORA-06512: at "HR.GET_DYNAMIC", line 7 ORA-06512: at line 2
盡管表名,列名和條件都正確。
請幫助!..
您不能使用綁定變量來構造SQL語句。 您只能將其用於傳遞數據。 用這種方式重寫您的過程:
create or replace function get_dynamic
(tbl_name nvarchar2,col_name nvarchar2 ,cond nvarchar2 )
return nvarchar2 is
res nvarchar2(30);
code varchar2(500):='begin select '||col_name||' into :res from '||tbl_name||' where '||cond||'; end;';
begin
EXECUTE IMMEDIATE code using out res;
return res;
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.