gpt4 book ai didi

sql - 从 Oracle SQL 过程中的表执行 SQL 语句

转载 作者:行者123 更新时间:2023-12-04 20:56:38 27 4
gpt4 key购买 nike

我是 PL/SQL 的新手,我正在努力解决以下问题。我找了 4 个小时的答案,但仍然无法正常工作...

我在一个包含 SQL 语句的表中有超过 300 条记录,我的目标 是编写一个能够在某些条件下循环处理它们的过程。我还想检查哪些查询通过了,哪些查询失败了。

所以它是这样的(步骤列表/伪代码):

  • 条件作为参数的过程或函数
  • 迭代符合条件的记录
  • 执行匹配的SQL语句
  • 给出执行成功或失败的信息

我试图做这样的事情(如下),但我认为这是不正确的 - 因为我没有循环记录。

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;

我正在考虑根据我的问题调整此代码:

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;

source here

大家怎么看?

提前感谢您的帮助,

亚瑟

最佳答案

你必须这样做:

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;

关于sql - 从 Oracle SQL 过程中的表执行 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28720416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com