标签: plsql

Oracle PL/SQL - 如何使用动态SQL插入多行

我想浏览所有表并将ID和tablename复制到表中.因为我必须使用变量作为表名,所以我尝试使用IMMEDIATE EXECUTE.但是对于动态SQL,INSERT INTO语句只允许单行.

如果 IMMEDIATE EXECUTE允许INSERT INTO使用muplitple行,则可以使用以下SQL语句.

DECLARE
    sqlStat VARCHAR2(500);

BEGIN 
  FOR TName IN (
  SELECT TABLE_NAME FROM all_tab_cols WHERE column_name='ID'
  )

  LOOP
    sqlStat := 'INSERT INTO storeTab (ID,TABLE_NAME) SELECT ID, '' :1 '' FROM :2';
    EXECUTE IMMEDIATE sqlStat USING TName.TABLE_NAME,TName.TABLE_NAME;
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

如何循环表和收集记录?

oracle plsql

0
推荐指数
1
解决办法
1187
查看次数

如何在oracle里面的where子句中使用case语句?

我得到PL/SQL:ORA-00905:运行以下脚本时缺少关键字错误

create or replace procedure testing
(ass_line in char,
 curs out sys_refcursor
)
is
begin
open curs for 
select asl.Production_Group,asl.last_sequence_nbr
from ASSEMBLY_LINE asl
where(case 
   when ass_line='551F'
     then asl.assembly_line in('551F','551C','551S')
   else
     asl.assembly_line=ass_line
   end);
end;
Run Code Online (Sandbox Code Playgroud)

请帮帮我

oracle plsql case

0
推荐指数
1
解决办法
2382
查看次数

PL/SQL中的包组织

我们正在使用PL/SQL中的Packages,我想知道我们是否可以以类似的方式工作.例如,Java,您可以在其中创建一个Package到另一个类似目录.例如:

myapplication.account.balance
Run Code Online (Sandbox Code Playgroud)

因此,我们可以使用具有相同名称但在不同子包中的包.

oracle plsql packages plsqldeveloper

0
推荐指数
1
解决办法
513
查看次数

oracle替换变量不适用于varchar2

我只想使用替换变量来获取customer_name(varchar2).但是当我执行下面的子程序时,它会引发异常.

DECLARE
    v_cid     dummytest.customer_id%type := &customer_id;
    v_cname   dummytest.customer_name%type := &customer_name;
BEGIN
    INSERT INTO dummytest ( customer_id,customer_name ) VALUES ( v_cid,v_cname );

    COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)

错误

Error report -
ORA-06550: line 3, column 47:
PLS-00201: identifier 'HUHU' must be declared
ORA-06550: line 3, column 15:
PL/SQL: Item ignored
ORA-06550: line 5, column 72:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 5, column 72:
PL/SQL: ORA-00904: "V_CNAME": invalid identifier
ORA-06550: line 5, column 5:
PL/SQL: …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

0
推荐指数
1
解决办法
396
查看次数

左联接返回的行比预期的少?请提供您的理由,

以下是我的查询

  Select Count(*)
         from Table1 s
               left join Table2 d
                    ON  s.subjectid = d.subjectid
                    and s.PROJECTID = d.projectid
                    and s.SITEName = d.SITENAME
               left join Table3 dev
                    on s.subjectid = dev.subjectid
                    and s.projectid = dev.projectid
                    and s.siteid = dev.siteid
         Where s.isprod =1
         and   d.isprod =1
         and  dev.isprod = 1
         and s.projectid =107
      -- Output 301 ROWS
Run Code Online (Sandbox Code Playgroud)

现在,此查询返回给我301行,但是,如果我不使用Table3,那么联接将返回2203行,如下面的查询所示

         Select Count(*)
         from Table1 s
               left join Table2 d
                    ON  s.subjectid = d.subjectid
                    and s.PROJECTID = d.projectid
                    and s.SITEName = d.SITENAME
         Where s.isprod =1 …
Run Code Online (Sandbox Code Playgroud)

plsql left-join where

0
推荐指数
1
解决办法
1195
查看次数

在Oracle SQL开发人员中,如果我们从查询浏览器运行过程,如何查看输出

当我编译并运行程序时,我有点惊讶

在此输入图像描述

绿色按钮如pic1所示,我从输出变量得到输出.

这是我的简单代码:

CREATE OR REPLACE PROCEDURE RUNPROCEDURE
    (P_para1  in EMP.ID%type,P_PARA out SYS_REFCURSOR) 
AS 
BEGIN
    OPEN P_PARA FOR
       SELECT * 
       FROM emp 
       WHERE ID = P_para1;
END RUNPROCEDURE;
Run Code Online (Sandbox Code Playgroud)

但是当我从查询浏览器运行时,我没有看到任何输出:=

set serveroutput on;
declare P_PARA1 number;
    P_PARA SYS_REFCURSOR;
begin
    RUNPROCEDURE(
        P_PARA1 => 2,
        P_PARA => P_PARA
    ) ;
end;
/
Run Code Online (Sandbox Code Playgroud)

它只是显示

PL/SQL procedure successfully complete
Run Code Online (Sandbox Code Playgroud)

我没有看到任何输出.

任何帮助赞赏.

oracle plsql oracle-sqldeveloper

0
推荐指数
1
解决办法
473
查看次数

如何使用REPLACE函数更改为动态sql转义

所以我尝试将此代码更改为动态SQL

SELECT  LISTAGG(accounting_dept || '-'||REPLACE(full_desc,'''',''''''), '; ') WITHIN GROUP (ORDER BY accounting_dept)  FROM table
Run Code Online (Sandbox Code Playgroud)

EXCUTE

12121-President''S Office
Run Code Online (Sandbox Code Playgroud)

我改为动态sql

EXECUTE IMMEDIATE
    ' SELECT  LISTAGG(accounting_dept || ''-''||REPLACE(full_desc,'''''',''''''''), ''; '') WITHIN GROUP (ORDER BY accounting_dept)  FROM table '

INTO v_task;
Run Code Online (Sandbox Code Playgroud)

错误是ORA-00907:缺少右括号

问题是这部分REPLACE(full_desc,''''','''''''',

如何在没有警告错误的情况下更改为动态sql?

oracle plsql

0
推荐指数
1
解决办法
334
查看次数

如何使PL/SQL执行得更快

我有这个PL/SQL程序,运行大约4-6分钟:

DECLARE
     i NUMBER := 0;
     begin
     for x in (select     anumber
               ,          position
               ,          character
               from       sdc_positions_cip
               where      kind = 'Name')
loop    
    update sdc_compare_person dcip
    set dcip.GESNAM_D = substr(dcip.GESNAM_D, 1, x.position - 1) || x.character || 
    substr(dcip.GESNAM_D, x.position + 1, length(dcip.GESNAM_D) - x.position)
    where dcip.sourcekey = x.anumber;

    i := i + 1;
    IF i > 100 THEN COMMIT;
    i := 0;
    END IF;
end loop;
commit;
end;
/
Run Code Online (Sandbox Code Playgroud)

我在dcip.sourcekey和上放了一个索引x.anumber.它使用的表空间是10GB.

有没有办法让这个程序(更多)更快?

oracle plsql

0
推荐指数
1
解决办法
115
查看次数

'USING'和||之间的区别 在PL SQL中

我只需要在PL/SQL代码中运行一个基本的SELECT查询.以下代码完美无缺:

BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM ' || 'TNAME';
END;
/
Run Code Online (Sandbox Code Playgroud)

但是遵循代码

BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM :1' USING 'TNAME';
END;
/
Run Code Online (Sandbox Code Playgroud)

提出错误说

ORA-00903:表名无效

ORA-06512:第2行

  1. 00000 - "表名无效"

*原因:
*行动:

我不能以任何方式使用"USING"传递表名吗?

oracle plsql oracle-sqldeveloper oracle12c

0
推荐指数
1
解决办法
61
查看次数

比较字符总是返回false

我是PL/SQL的新手,我的存储过程已经存在问题.它编译,但一个IF语句永远不会按需运行.

IF SUBSTR(p_phone_number, 5, 1) <> '2' OR SUBSTR(p_phone_number, 5, 1) <> '6' THEN
    RAISE ex_phone_number_non_lv_custom2;
END IF;
Run Code Online (Sandbox Code Playgroud)

调用程序时,p_phone_number是'+37122222222'类型的VARCHAR2(12).我使用了服务器输出,SUBSTR(p_phone_number, 5, 1)并且它是预期的2,但是这个IF语句仍然引发了我的异常.为什么会这样?

sql oracle plsql

0
推荐指数
1
解决办法
49
查看次数