Oracle
Oracle PL/SQL 不起作用——不允許綁定變數
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; /