使用dyanmic sql通过将模式名称和表名作为参数传递给存储过程来更新语句。 现在它正在发挥作用。
create or replace procedure p11(v_sal in number,v_schema varchar2,v_tab varchar2)
v_sql varchar2(100);
is
begin
v_sql:='update '|| v_schema||'.'||v_tab||' set sal= '||v_sal||' where empno= :1 ';
dbms_output.put_line(v_sql);
Execute immediate v_sql using 7839;
end;
答案 0 :(得分:1)
你应该至少考虑空格。
create or replace procedure p11(v_sal in number,v_schema varchar2,v_tab varchar2)
is
begin
Execute immediate 'update '|| v_schema.v_tab||' set sal='||v_sal||' where empno= :1' using 7839;
end;
答案 1 :(得分:0)
此过程错误无法承受SQL注入攻击的潜在来源。应该重写它以避免直接从输入值构建动态查询。相反,应该对输入进行某种形式的验证。
这是重写程序的一种可能方式:
.directive('vdfWidgetGoogleChart', ['$timeout', function ($timeout) {
return {
restrict: 'E',
//replace: true,
templateUrl: 'widgetgooglechart.html',
link: function ($scope, elem, attrs) {
function addTabIndex () {
elem.find('svg').attr({tabindex: -1});
}
$timeout(addTabIndex);
},
scope: {
chartObject: '='
}
}
答案 2 :(得分:0)
检查包DBMS_SQL以动态执行查询。步骤如下。
打开光标
解析
绑定变量
执行
关闭光标