Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle SQL中将多个值作为单个参数传递_Sql_String_Oracle_Plsql - Fatal编程技术网

如何在Oracle SQL中将多个值作为单个参数传递

如何在Oracle SQL中将多个值作为单个参数传递,sql,string,oracle,plsql,Sql,String,Oracle,Plsql,我正在尝试更新具有相同表名的多个模式中的值 所以我尝试创建一个查询,将多个值作为单个参数传递,但它不起作用。请推荐我 DECLARE v_sql varchar2(500); v_schema varchar(30); v_prj_id varchar2(4000); in_PRJ_ID varchar2(4000); v_prj_id := 'B00781728,B00781628,B00781611,A43670001'; CURSOR c1

我正在尝试更新具有相同表名的多个模式中的值

所以我尝试创建一个查询,将多个值作为单个参数传递,但它不起作用。请推荐我

DECLARE
    v_sql varchar2(500);
    v_schema varchar(30);
    v_prj_id varchar2(4000);
    in_PRJ_ID varchar2(4000);
    v_prj_id := 'B00781728,B00781628,B00781611,A43670001';

    CURSOR c1 is
      SELECT v_prj_id from DUAL;

BEGIN

    OPEN c1;

    FOR i IN (SELECT trim(regexp_substr(v_prj_id, '[^,]+', 1, LEVEL)) l FROM dual CONNECT BY LEVEL <= regexp_count(v_prj_id, ',') + 1 ) LOOP

        FETCH c1 INTO in_PRJ_ID;

        EXIT WHEN c1%NOTFOUND;

        v_sql := 'UPDATE ' || in_PRJ_ID || '.SI_Recipient set email = email ||'';Seshadri.K@iconplc.com'''  ;

        EXECUTE IMMEDIATE v_sql;

    END LOOP;

    CLOSE c1;

END;
这项工作:

Declare
  v_sql varchar2(500);
  v_schema varchar(30);
  v_prj_id varchar2(4000):='B00781728,B00781628,B00781611,A43670001';
BEGIN
  Dbms_Output.Put_Line('v_prj_id='||v_prj_id);
  --
  FOR i IN (SELECT trim(regexp_substr(v_prj_id, '[^,]+', 1, LEVEL)) l
            FROM dual 
            CONNECT BY LEVEL <= regexp_count(v_prj_id, ',') + 1 
           ) LOOP
      --
      Dbms_Output.Put_Line('---------------------');
      --
      --
      v_sql := 'UPDATE ' || i.l|| '.SI_Recipient set email = email ||'';Seshadri.K@iconplc.com'''  ;
      --
      Dbms_Output.Put_Line('v_sql='||v_sql);
      --
      begin
        EXECUTE IMMEDIATE v_sql;
      Exception
        when others then
             Dbms_Output.Put_Line('sqlerrm='||sqlerrm);
      End;
      --
  END LOOP;
END;
/
因为在我的oracle实例中,我没有架构B00781728、B00781628、B00781611、A43670001,所以我得到错误ORA-00942表或视图不存在。

对值使用集合或变量,这样就不必拆分分隔字符串,并且可以对希望附加到电子邮件字符串的值使用绑定参数:

声明 v_sql varchar2500; v_模式varchar30; v_prj_id varchar24000; 在ID SYS.ODCIVARCHAR2列表中:=SYS.ODCIVARCHAR2列表“B00781728”、“B00781628”、“B00781611”、“A43670001”; 开始 因为我在1。。in_PRJ_ID.COUNT循环 v|U sql:=“更新”在|PRJ|u IDi||中。SI|u收件人” ||'设置电子邮件=电子邮件| | | | |:地址'; 开始 使用“Seshadri”执行即时v_sql。K@iconplc.com'; 例外 当其他人 DBMS_OUTPUT.PUT_LINE SQLERRM; 终止 端环; 终止 / 产出:


dbfiddle

当你说它不工作时,那是什么意思?它不编译吗?它是否引发运行时异常?它运行但什么也不做吗?请记住,我们无法看到您的屏幕,我们没有您的环境,我们无法运行您的代码。我们只知道你告诉我们的。请参阅帮助部分。以此作为模板,可以大大提高您获得满意答案的机会。至少发布您的表DDL,并用业务术语而不是SQL术语描述您试图实现的目标。所有答案都使用您的值,它们表示表名;当然,这是从你最初的帖子开始的。重申APC不起作用,当然,如果是的话,你就不会寻求帮助。但为什么它不起作用呢。如果我只是说:it's not right会给你同样数量的信息,但是非常有用。Shi@alvalongo非常感谢你的提问。。成功了。我还有一个问题。我需要在更新语句中添加where条件,如下所示:v_prj_id=B00781728、B00781628、B00781611、A43670001 v_event=A、B、C、D;i、 e对于B00781728=A、B00781628=B、B00781611=C和A43670001=D-------v_sql=UPDATE B00781728.SI_收件人集email=email | |;塞沙德里。K@iconplc.com'其中EVENT=V_EVENT与此类似,我需要打印这些结果的输出。
v_prj_id=B00781728,B00781628,B00781611,A43670001
---------------------
v_sql=UPDATE B00781728.SI_Recipient set email = email ||';Seshadri.K@iconplc.com'
sqlerrm=ORA-00942: la tabla o vista no existe
---------------------
v_sql=UPDATE B00781628.SI_Recipient set email = email ||';Seshadri.K@iconplc.com'
sqlerrm=ORA-00942: la tabla o vista no existe
---------------------
v_sql=UPDATE B00781611.SI_Recipient set email = email ||';Seshadri.K@iconplc.com'
sqlerrm=ORA-00942: la tabla o vista no existe
---------------------
v_sql=UPDATE A43670001.SI_Recipient set email = email ||';Seshadri.K@iconplc.com'
sqlerrm=ORA-00942: la tabla o vista no existe
Total execution time 344 ms
UPDATE B00781728.SI_Recipient set email = email || ';' || :addr ORA-00942: table or view does not exist UPDATE B00781628.SI_Recipient set email = email || ';' || :addr ORA-00942: table or view does not exist UPDATE B00781611.SI_Recipient set email = email || ';' || :addr ORA-00942: table or view does not exist UPDATE A43670001.SI_Recipient set email = email || ';' || :addr ORA-00942: table or view does not exist