达梦通过命令行批量删除表

先保存下面的内容为 SQL 脚本:

DECLARE
    SCH_NAME VARCHAR(20) := 'YOUR_SCHEMA'; -- 替换为要删除表的模式名
    TAB_NAME VARCHAR(100);
    SQL1     VARCHAR(500);
    SQL2     VARCHAR(500);
    C1 CURSOR;
BEGIN
    -- 使用 USER_TABLES 视图查找用户下的表
    SQL1 := 'SELECT TABLE_NAME FROM USER_TABLES;';
    OPEN C1 FOR SQL1;
    LOOP
        FETCH C1 INTO TAB_NAME;
        EXIT WHEN C1%NOTFOUND;
        SQL2 := 'DROP TABLE "' || SCH_NAME || '"."' || TAB_NAME || '";';
        EXECUTE IMMEDIATE SQL2;
    END LOOP;
    CLOSE C1;
END;
/

DECLARE 定义了变量和游标。SQL1 用于获取要删除的表的名称。

执行时,打开游标 C1 执行 SQL1。LOOP 循环遍历游标中的每一行,执行 SQL2 删除表。EXIT WHEN C1%NOTFOUND;表示当没有更多行时退出循环。

然后切换到达梦的bin目录:

cd /path/to/your/dmdbms/bin/

执行如下命令进入 SQL 命令行:

./disql USER_NAME/\"PASS_WORD\"@localhost:5236

加两个\"是处理密码中存在@之类的特殊字符的情况

然后先执行set define off;来禁用 SQL 命令行中的特殊字符,再执行上面的 SQL 脚本:

SQL> set define off;
SQL> start /path/to/your/script.sql
posted @ 2025-02-07 19:36  Higurashi-kagome  阅读(597)  评论(0)    收藏  举报