标签: execute-immediate

执行IMMEDIATE'一些命令'

是否可以在一个EXECUTE IMMEDIATE块中执行一些sql命令?

这种语法有什么问题:

declare
    pragma autonomous_transaction;
begin           
    execute immediate
    'begin
        COMMENT ON TABLE t1 IS ''description1'';
        COMMENT ON TABLE t2 IS ''description2'';            
    end;';
end;
Run Code Online (Sandbox Code Playgroud)

对于一个SQL命令,它工作正常:

declare
    pragma autonomous_transaction;
begin           
    execute immediate ' COMMENT ON TABLE t1 IS ''description1'' ';
end;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql execute-immediate

3
推荐指数
1
解决办法
5425
查看次数

执行立即更改序列不工作

我坚持这个非常简单的脚本.它不像我期望的那样工作.

declare
 st VARCHAR(1024);
begin
  for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1000';
      execute immediate st;
      st := 'select ' || x.sequence_name ||  '.nextval from dual';
      execute immediate st;
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1';
      execute immediate st;
  end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)

当我运行它时它似乎根本不起作用 - 我的所有序列都保持不变,并且它们没有被动态语句增加一千.如果我nextval在匿名阻止之前和之后检查,差异只有1,而不是1001.

如果我更换execute immediatedbms_output.put_line,并执行生成的命令手动序列被改变,因为我想.

我错过了什么?

oracle plsql sequence execute-immediate

3
推荐指数
1
解决办法
4950
查看次数

Oracle PL/SQL版本12.2.0.1.0与12.1.0.2.0 - 使用参数立即执行

DECLARE
  max_id INTEGER;
BEGIN
  SELECT MAX(ID) + 1 INTO max_id FROM MY_TABLE;

  EXECUTE IMMEDIATE 'CREATE SEQUENCE  MY_TABLE_ID  MINVALUE 1 MAXVALUE 99999999999999 INCREMENT BY 1 START WITH ' || max_id || ' CACHE 100 NOORDER  NOCYCLE  NOPARTITION';

END;
Run Code Online (Sandbox Code Playgroud)

上面给我ORA-00933: SQL command not properly ended执行时

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
Run Code Online (Sandbox Code Playgroud)

并且无误地工作

   Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
Run Code Online (Sandbox Code Playgroud)

将execute语句更改为以下后,它适用于两个版本,没有任何错误.

 CREATE SEQUENCE  MY_TABLE_ID …
Run Code Online (Sandbox Code Playgroud)

oracle plsql execute-immediate

3
推荐指数
1
解决办法
421
查看次数

使用立即执行引用游标

我想在ref_cursor中得到结果,但我无法做到这一点.

请建议我如何使用Execute immediate在ref_cursor中获取结果

CREATE OR REPLACE PROCEDURE TEST_PROC_QT ( p_name IN VARCHAR2,
                                           p_result_set OUT sys_refcursor ) IS

  v_sql VARCHAR2(4000);

BEGIN

   v_sql := '';
   v_sql := 'SELECT * FROM USERS WHERE 1=1 ';

   IF p_name is not null THEN
     v_sql := v_sql || ' AND login_id = :v_name';
   ELSE
     v_sql := v_sql || ' AND ((1=1) or :v_name is null)';
   END IF;

   Dbms_output.put_line(v_sql);

   EXECUTE IMMEDIATE v_sql

   --OPEN p_result_set for v_sql
   --INTO p_result_set using p_name;  

END;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql sys-refcursor execute-immediate

2
推荐指数
1
解决办法
2万
查看次数

在sqlplus中执行立即截断表

为什么execute immediate 'truncate table trade_economics';在 sqlplus 脚本中会出现以下错误?

 BEGIN immediate 'truncate table trade_economics'; END;
                    *
    ERROR at line 1:
    ORA-06550: line 1, column 17:
    PLS-00103: Encountered the symbol "truncate table trade_economics" when
    expecting one of the following:
    := . ( @ % ;
    The symbol ":=" was substituted for "truncate table trade_economics" to
    continue.`
Run Code Online (Sandbox Code Playgroud)

truncate sqlplus execute-immediate

2
推荐指数
1
解决办法
1万
查看次数

在oracle中将字符串作为查询运行

我在Oracle中遇到了一些问题.我尝试创建一个序列,用于在已包含数据的表中生成ID.我尝试使用以下匿名块.

declare y varchar2(2000);
BEGIN
  SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH ' || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20;' INTO y FROM TEST_TABLE;
  --dbms_output.put_line(y);
  execute immediate y;
end;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error report:
ORA-00911: invalid character
ORA-06512: at line 5
00911. 00000 -  "invalid character"
Run Code Online (Sandbox Code Playgroud)

如果我执行y变量的值,它就可以完美地运行.我正在使用SQL Developer作为输入接口并在11g r2 Oracle服务器上工作.我找到了类似的代码,其中'INCREMENT BY'参数是脚本生成的.有人可以解释我的错误吗?

oracle sequence execute-immediate ora-06512

2
推荐指数
1
解决办法
7160
查看次数

EXECUTE IMMEDIATE oracle中的临时表未创建ORA-00942

基于这个答案,我试图创建临时表,但是我得到异常ORA-00942:table or view does not exist我会认为'CREATE OR REPLACE GLOBAL TEMPORARY TABLE TempQandA(column1 number) ON COMMIT PRESERVE ROWS'语句有问题,它失败了insert into TempQandA(column1) VALUES (1);.
请在下面找到SQL语句.

DECLARE 
TransactioDetailId numeric := 3132;
HomePhoneNumber varchar(20);
MobileNumber varchar(20);
Email varchar(20);
whatever varchar(20);
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE GLOBAL TEMPORARY TABLE TempQandA(column1 number) ON COMMIT PRESERVE ROWS';

        BEGIN
        SELECT contactvalue into HomePhoneNumber  FROM customercontact CC
         inner join TRANSACTIONMAIN tm on tm.customerid = CC.customerid
         inner join transactiondetail td on td.transactionid …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle11g execute-immediate

2
推荐指数
1
解决办法
5041
查看次数

PLOP中的PL/SQL EXECUTE IMMEDIATE(截断模式中所有表的过程)

我需要创建一个过程,它将从一个模式中的表中删除所有数据.我尝试过类似的东西

CREATE OR REPLACE PROCEDURE CLEAR_ALL
IS
  sql_truncate VARCHAR2(50);

  cursor c1 is
   SELECT table_name
   FROM all_tables 
   WHERE owner = 'KARCHUDZ_S';
BEGIN
  sql_truncate := 'TRUNCATE TABLE :text_string';
  FOR table_name in c1
   LOOP
      EXECUTE IMMEDIATE sql_truncate USING table_name;
   END LOOP;
END CLEAR_ALL;
Run Code Online (Sandbox Code Playgroud)

但它给了我两个我无法理解和修复的错误.

错误(13,7):PL/SQL:语句被忽略

错误(13,44):PLS-00457:Statment必须是SQL的类型< - (这个错误我必须翻译,因为我使用大学Oracle 11g基础有波兰语lang)

oracle plsql procedure execute-immediate

2
推荐指数
1
解决办法
2万
查看次数

立即执行:遇到符号

我目前收到此错误 ORA-06550 PLS-00103 遇到符号“VERSION”...

任何人都可以帮我解决这个问题吗?非常感激!

declare
sql_stmnt VARCHAR(200);
lsparameter varchar(50);
lsparameterdata varchar(20);

begin
 sql_stmnt := 'SELECT parameter, parameter_data into lsparameter, lsparameterdata FROM MyTable WHERE parameter = 'version'';
 EXECUTE IMMEDIATE sql_stmnt;
end;
Run Code Online (Sandbox Code Playgroud)

我知道我已经在 where 子句中将参数设置为“version”。我想从 MyTable 检索参数和parameter_data 以检查版本,然后继续执行函数的其余部分。

提前致谢。

oracle select function execute-immediate plsqldeveloper

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

表或视图不存在

您好,以下是我的代码.我需要使用视图中的数据创建一个视图并在另一个游标中获取数据.但是当我执行我的代码时,我收到错误

"ORA-06550:第56行,第37列:PL/SQL:ORA-00942:表或视图不存在ORA-06550:第52行,第9列:PL/SQL:忽略SQL语句"

这是什么问题?提前致谢.

declare

drop_view_sql varchar2(100) := 'drop view rv_task_number_view';

type tasks_rec is record(task_number varchar2(20));

type t_tab is table of  tasks_rec;

tasks_tab t_tab;

notes_rec xx_fs_mob_loc_rec.task_notes_rec;

notes_tab xx_fs_mob_loc_rec.task_notes_tab;

    begin

        execute immediate 'create view apps.rv_task_number_view  as
                          SELECT distinct ct.task_number                  
                          FROM csf_ct_tasks ct ,

                            cs_estimate_details ced,
                            csf_debrief_headers cdh,
                            csf_debrief_lines   cdl,
                            jtf_task_assignments jta  

                   WHERE    1=1
                   and      jta.task_id = ct.task_id
                   and      jta.task_assignment_id = cdh.task_assignment_id(+)
                   and      cdh.debrief_header_id = cdl.debrief_header_id(+)
                   and      cdl.debrief_line_id = ced.source_id(+)
                   AND      ((ct.planned_end_date between (sysdate-30) and (sysdate+30)) or (ct.scheduled_end_date between (sysdate-30) and (sysdate+30)))
                   and …
Run Code Online (Sandbox Code Playgroud)

oracle plsql execute execute-immediate

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

动态调用存储过程(立即执行)输出参数问题

我有问题动态调用存储过程

\n\n
    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2 '',:v_output2);  end;';\n    execute immediate v_sql\n    using  out v_output2 ;\n    dbms_output.put_line(v_output2 || ' ' );\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里 \xc4\xb1 可以调用立即执行的过程。\n但我的问题是动态绑定变量。该值来自日志表,然后我解析execute_immediate 过程

\n\n
    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2'',:v_output2);  end;';\n    v_sql1:= ||using||  'out v_output2 ' ;\n\n    execute immediate v_sql\n    v_sql1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它不是那样工作的。我如何使动态变量绑定,因为我调用了很多过程,并且该过程具有不同的输入和输出参数。\n我希望你能理解我遇到的问题。我该如何解决这个问题,谢谢

\n

oracle plsql stored-procedures execute execute-immediate

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

如何使用`execute immediate`为变量赋值?

我试图execute immediate用作分配变量值的特殊要求.我使用以下代码并获得如下异常.

declare
  lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
  l_str varchar2(400);

  a number(10);
begin
  select *
    into lv_kyc_main_GBL
    from KYC_GBL_MAIN.KYC_MAIN
   where rownum = 1;

  -- l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';

  l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
  dbms_output.put_line(l_str);

  execute immediate (l_str);
end;
/
Run Code Online (Sandbox Code Playgroud)

我得到的例外是:

anonymous block completed
lv_kyc_main_GBL.legal_name := 'TEST'
Run Code Online (Sandbox Code Playgroud)

在命令的第4行开始出错:

declare
  lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
  l_str varchar2(400);

  a number(10);
begin
  select *
    into lv_kyc_main_GBL
    from KYC_GBL_MAIN.KYC_MAIN
   where rownum = 1;

  --l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';

  l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
  dbms_output.put_line(l_str);

  execute immediate (l_str);
end;
/

Error report:
ORA-00900: invalid SQL statement
ORA-06512: …
Run Code Online (Sandbox Code Playgroud)

oracle plsql dynamic-sql execute-immediate

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