Oracle

Oracle PL/SQL 不起作用——不允許綁定變數

  • August 22, 2020

Oracle 12.2 PL/SQL

執行時:

declare
   s_sql varchar2(200);
begin
   s_sql := 'dbms_hs_passthrough.execute_immediate@mylink' || '(''exec sp_get_names'')';
   execute immediate 'begin :x; end;' using in s_sql;
end;
/

失敗:

PLS-00110: bind variable 'X' not allowed in this context

該程序執行良好

begin
    dbms_hs_passthrough.execute_immediate@mylink('exec sp_get_names'); 
end;
/

但我想保持動態。那麼如何(如果有的話)dbms_hs_passthrough.execute_immediate@mylink()像第一個範例中那樣以動態方式執行該過程?注意:理解什麼是沒有任何意義的dbms_hs_passthrough.execute_immediate@mylink(),只是如何使它(或任何其他被呼叫的過程)動態。有什麼建議麼?

您不能將過程作為綁定變數傳遞。

您應該能夠動態建構整個匿名 PL/SQL 塊並執行它。像這樣的東西

declare
 l_plsql varchar2(1000);
begin
 l_plsql := 'begin 
               dbms_hs_passthrough.execute_immediate@mylink ... 
             end;';
 execute immediate l_plsql;
end;

你不需要聲明返回碼,你甚至可以得到它:

declare 
  s_sql varchar2(200);
  retcode nubmer;
begin
  s_sql := 'begin :retcode := dbms_hs_passthrough.execute_immediate@mylink(''exec sp_get_names'') end;';
  execute immediate s_sql using out retcode;  
end;
/

引用自:https://dba.stackexchange.com/questions/273719