gpt4 book ai didi

batch-file - 使用来自查询的变量进行 SQLPlus 条件执行

转载 作者:行者123 更新时间:2023-12-03 23:25:04 25 4
gpt4 key购买 nike

我有一个批处理文件,其中包含许多步骤,可以一一执行。

但是,为了使其更加灵活,我想在 SQLPlus 中包含一个条件检查。 .

比如,首先从查询中获取条件变量的值并存储在说 v_variable 中。 .然后将其用于一些检查,例如

IF v_variable = 'Y' THEN
--DO SOME DDL
ELSE
--DO OTHER DDL
END IF

我必须在批处理文件的许多地方重复这个块,我无法通过 PL/SQL 以某种方式完成它。

我正在尝试使用这个 COLUMN SQLPlus 中的命令但不知何故没有得到变量值来保存。
COLUMN VARIABLE1 NEW_VALUE V_VARIABLE1

SELECT PARAM_VAL AS VARIABLE1 FROM TABLE_T WHERE PARAM_TYPE = 'XYZ';
-- This query will only throw one record.

DEFINE V_VARIABLE1

那是绝对错误的吗?我们怎么做才能看到 V_VARIABLE1是从查询中获取值吗?

即使我做对了,我对 IF-ELSE 一无所知部分。有人可以帮忙吗?我对适用于 SQLPlus 的解决方案感兴趣。

最佳答案

sql*plus 本身不支持流控制,因此您可以在此处执行的任何操作都介于“解决方法”和“hack”之间。一些可能的选择是:

  • 使用 PL/SQL 块并通过 execute
    immediate
    作为动态 SQL 运行您的 DDL或 dbms_utility.execute_ddl_statement .完全访问
    PL/SQL 特性,因此在流量控制和
    语句构建,但如果您正在部署,则更难管理
    大的东西。
  • 为每个 if/else 分支编写一个脚本文件,用一些东西获取它的名字
    就像您在帖子中提供的列/查询技巧一样,运行它
    类似 @&scriptname .
  • 使用替换变量,如果使用得当,会注释
    删除脚本的某些部分。您可以使用 Tanel Poder 的鲷鱼
    实用程序 script例如;通知&_IF_代换
    那里的变量。
  • 您可以将子脚本嵌入到父脚本的 pl/sql 块中。喜欢
    此:

  • ——
    21:21:23 SQL> ho cat run.sql
    begin
    case '&1.' when 'A' then
    @script_a
    when 'B' then
    @script_b
    else
    null;
    end case;
    end;
    /

    21:21:26 SQL> ho cat script_a.sql
    dbms_output.put_line('this is a');

    21:21:30 SQL> ho cat script_b.sql
    dbms_output.put_line('this is b');

    21:21:34 SQL> @run
    Enter value for 1: A
    this is a

    PL/SQL procedure successfully completed.

    Elapsed: 00:00:00.02
    21:21:37 SQL> @run B
    this is b

    PL/SQL procedure successfully completed.

    Elapsed: 00:00:00.03

    关于batch-file - 使用来自查询的变量进行 SQLPlus 条件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543873/

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