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 块并执行它。像这样的东西
你不需要声明返回码,你甚至可以得到它:
这有效(这就是我相信贾斯汀凯夫在上面提到的):
起初(在尝试 Justin Cave 的建议时)我遇到了(误导性)错误,因为我忘记了处理返回码。