【问题标题】:If statement inside create table query -Oracle-创建表查询 -Oracle- 中的 if 语句
【发布时间】:2015-09-04 14:27:03
【问题描述】:

我想创建首先询问用户输入的表格。然后根据输入,选择要添加的列。

例如,如果响应为“N”,则创建包含列 col1、col2、col3 的表。 如果响应为“Y”,则创建包含列 col1、col2、col3、col4、col5 的表。

这可能吗? 如果是,请向我提供简单而原始的查询,以便我可以将其应用于我的案例。

谢谢,

【问题讨论】:

  • CREATE TABLE 语句中不能有条件逻辑。您可以使用任何您喜欢的客户端语言编写一个小脚本,要求用户输入并创建两个 DDL 语句之一作为响应。
  • 为什么不呢?使用动态 SQL 他可以。创建一个小函数,您可以创建一个 if 语句,您可以根据输入决定使用哪个 DDL
  • @Thomas - 这不是CREATE TABLE 语句中的逻辑。这是围绕两个单独的潜在CREATE TABLE 语句的逻辑。您仍然需要一个小脚本来提示用户输入,然后调用该函数(您可以为此使用 SQL*Plus 脚本,这只是您可以使用的客户端脚本语言之一)。

标签: oracle


【解决方案1】:

使用 SQL*Plus 很简单:

ACCEPT table_option -
PROMPT 'Create more columns? '

SET TERM OFF
COLUMN extra_columns NEW_VALUE extra_columns
SELECT
    CASE '&table_option'
        WHEN 'Y' THEN ', C4 NUMBER, C5 VARCHAR2(255), C6 DATE'
    END extra_columns FROM DUAL;

CREATE TABLE tmp (
    C1 NUMBER,
    C2 VARCHAR2(255),
    C3 DATE &extra_columns
);

SET TERM ON

您可以将脚本存储为文件并使用@filename 从 SQL*Plus 调用它。

【讨论】:

    【解决方案2】:
    CREATE OR REPLACE FUNCTION tmp_custom_DDL( p_input  VARCHAR2 IN, p_resp CHAR IN OUT)  RETURN CHAR
    AS
    
    v_str    VARCHAR2(4000);
    
    IF p_resp = 'Y' THEN 
    
    v_str := 'col1 varchar2(10), col2 varchar2(10), col3 varchar2(10)';
    
    ELSE v_str := 'col1 varchar2(10), col2 varchar2(10), col3 varchar2(10), col4 varchar2(10), col4 varchar2(10) ' ; 
    
    EXECUTE IMMEDIATE v_comm_1  || v_str  || v_comm2;
    --v_comm_1  is the first half of create table command till the specified cols
    --v_comm_2 is the rest of the create table command
    
    
    RETURN p_resp;
    
    END;
    

    这只是一个草稿,修复几个词法错误和缺少的定义:)(这是第一步)

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多