gpt4 book ai didi

oracle - 在 Shell 脚本中执行 PLSQL block 时出现问题

转载 作者:行者123 更新时间:2023-12-02 01:31:29 25 4
gpt4 key购买 nike

我正在尝试使用 shell 脚本删除具有特定后缀(作为参数 $1 传递)的表。

如果选择了父表而没有删除其子表,则我将绕过父表并增加异常 block 中的计数器。

当我在 sql Developer 中运行此脚本并将 $1 替换为正确的值时,它可以工作。但是当我运行这个 shell 脚本时,它被卡住了。

您能看一下并告诉我,我在 shell 脚本中缺少什么吗?

代码:

#!/bin/bash

cat <<ENDDROPNEWTABS >dropnewtabs.sql
set pagesize 100

DECLARE

t_cnt NUMBER;
CURSOR C001
IS
SELECT table_name FROM user_tables WHERE table_name LIKE '%$1%';

BEGIN
BEGIN SELECT COUNT(*) INTO t_cnt FROM user_tables WHERE table_name LIKE '%$1%';
END;

WHILE(t_cnt > 0) LOOP
FOR i IN C001 LOOP
BEGIN EXECUTE IMMEDIATE 'DROP TABLE '||i.table_name;
EXCEPTION
WHEN OTHERS THEN
t_cnt := t_cnt+1;
NULL;
END;
t_cnt := t_cnt-1;
END LOOP;
END LOOP;

END;

exit
ENDDROPNEWTABS

echo "Dropping the tables created for this task..."

sqlplus -s usn/pwd@sid @dropnewtabs.sql >tablesDropped.txt

#END

最佳答案

您在匿名 block 的 END; 之后缺少 /,因此它永远不会执行它,并且 exit 将是被视为前一个命令的一部分。 / 非常类似于 SQL Developer 中的“运行”。

...
END LOOP;

END;
/

exit
ENDDROPNEWTABS

(您不需要 SELECT 周围的 BEGIN/END,也不需要 NULL异常处理程序,但这些不会破坏任何东西;默默地消除所有可能的异常也不是一个好主意,只需寻找您期望看到的异常即可。而且我个人发现使用一些缩进更容易理解)。

关于oracle - 在 Shell 脚本中执行 PLSQL block 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10495322/

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