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

标签 batch-file sqlplus conditional-statements

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

但是,为了使其更加灵活,我想在 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/

    相关文章:

    batch-file - 字符串批处理文件的 Base64 解码

    oracle - 在sql plus脚本中运行循环

    java - 根据系统时间调用函数

    mysql - 为什么 sql 查询选择不必要的值?

    java - "loops"是 Java 中的 "Conditional Statement"类型吗?

    windows - 如何使用 Windows cmd 在文本文件的每一行中添加一个字符串?

    c - 32/64 位 psr.exe 问题

    mysql - 使用批处理文件备份 MySQL 数据库,其中每个表都位于单独的文件中

    linux - sqlplus:加载共享库时出错:libsqlplus.so:无法打开共享对象文件:没有这样的文件或目录

    sql - 在 SQLPLUS 中正确格式化表