[英]Execute the SQL statements from table within an Oracle SQL procedure
I'm a newbie in PL/SQL and I'm struggling with following issue. 我是PL / SQL的新手,我正在努力解决以下问题。 I'm looking for an answer for 4 hours and it's still not working... 我正在寻找一个4小时的答案,它仍然无法正常工作......
I've got above 300 records in a table with SQL statements and my goal is to write a procedure that is able to loop over them under some conditions. 我在一个包含SQL语句的表中获得了300条以上的记录, 我的目标是编写一个能够在某些条件下循环它们的过程 。 I'd like also to check which queries passed and which ones failed. 我还想检查哪些查询通过,哪些查询失败。
So it goes like this (list of steps/pseudocode): 所以它就像这样(步骤列表/伪代码):
I was trying to do something like this (below) but I think it's not correct - because I'm not looping over records. 我试图做这样的事情(下面),但我认为这不正确 - 因为我没有循环记录。
DECLARE
sql_stmt VARCHAR2(3000);
BEGIN
sql_stmt := 'SELECT testcase_sql
FROM data_audit_testcase_v2
WHERE testcase_desc LIKE ''Test 6 - EM%''';
dbms_output.put_line('Sth: ' || sql_stmt);
EXECUTE IMMEDIATE sql_stmt ;
END;
I'm thinking about adjusting this code to my issue: 我正在考虑将此代码调整为我的问题:
FOR q IN (SELECT sql_text FROM query_table)
LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
INTO some_local_variable;
<<do something with the local variable>>
END LOOP;
What do you guys think? 你们有什么感想?
Thank you for your help in advance, 提前谢谢你的帮助,
Arthur 亚瑟
You have to do it like this: 你必须这样做:
DECLARE
sql_stmt VARCHAR2(3000);
cur SYS_REFCURSOR;
some_local_variable data_audit_testcase_v2.testcase_sql%TYPE;
BEGIN
sql_stmt := 'SELECT testcase_sql
FROM data_audit_testcase_v2
WHERE testcase_desc LIKE :val';
DBMS_OUTPUT.PUT_LINE('Sth: ' || sql_stmt);
OPEN cur FOR sql_stmt USING 'Test 6 - EM%';
LOOP
FETCH cur INTO some_local_variable;
EXIT WHEN cur%NOTFOUND;
<<do something with the local variable>>
END LOOP;
CLOSE cur;
END;
我找到了解决方案 - 我在SELECT中添加了第二个参数,所以PUT_LINE不知道如何显示它:)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.