Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 否则,检查变量值,无需定义整个结果集_Oracle_Plsql - Fatal编程技术网

Oracle 否则,检查变量值,无需定义整个结果集

Oracle 否则,检查变量值,无需定义整个结果集,oracle,plsql,Oracle,Plsql,我有两个类似的查询用于工作研究,我试图使用一个布尔变量来决定运行哪个查询 问题: Declare Submit_Denied_Lines Boolean; Begin Submit_Denied_Lines := True; --or false depending on their needs If Submit_Denied_Lines = False Then GOTO Qry_Status_X; Else GOTO Qry_Resolution; END IF; END

我有两个类似的查询用于工作研究,我试图使用一个布尔变量来决定运行哪个查询

问题:

Declare Submit_Denied_Lines Boolean;
Begin Submit_Denied_Lines := True; --or false depending on their needs

If Submit_Denied_Lines = False Then
    GOTO Qry_Status_X;
Else
    GOTO Qry_Resolution;
END IF;
END;

<<Qry_Status_X>>

(The Status_X query)

GOTO The_End;

<<Qry_Resolution>>

(The Resolution query)

<<The_End>>
为了保存一个变量,我想我需要使用PL/SQL块,这似乎需要我定义resultset的每一列,并将大容量收集到resultset中。我将此设置为我的同事的模板,他们中的大多数人只知道非常基本的SQL,因此我不能要求他们定义新的列

我是否有办法允许他们设置布尔变量并在PL/SQL块之外运行相应的SQL查询?有更好的方法吗

我目前拥有的(不起作用):

Declare Submit_Denied_Lines Boolean;
Begin Submit_Denied_Lines := True; --or false depending on their needs

If Submit_Denied_Lines = False Then
    GOTO Qry_Status_X;
Else
    GOTO Qry_Resolution;
END IF;
END;

<<Qry_Status_X>>

(The Status_X query)

GOTO The_End;

<<Qry_Resolution>>

(The Resolution query)

<<The_End>>
声明提交\u拒绝\u行布尔值;
开始提交\u拒绝\u行:=True--或者根据他们的需要而定
如果Submit\u Denied\u Lines=False,则
转到Qry_状态_X;
其他的
GOTO Qry_决议;
如果结束;
结束;
(状态查询)
走到尽头;
(决议查询)
注意事项:

Declare Submit_Denied_Lines Boolean;
Begin Submit_Denied_Lines := True; --or false depending on their needs

If Submit_Denied_Lines = False Then
    GOTO Qry_Status_X;
Else
    GOTO Qry_Resolution;
END IF;
END;

<<Qry_Status_X>>

(The Status_X query)

GOTO The_End;

<<Qry_Resolution>>

(The Resolution query)

<<The_End>>
如果我问的不可能,我将发布两个SQL文件供他们使用,并留下关于哪一个适用于哪种情况的注释


谢谢你的帮助。

你错过了很多信息。是相同的选择,但标准不同吗?(where子句)或完全不同的

这是一种完全不同的方法这是可运行的

declare
    submit_denied_lines   boolean := true;
begin
    if submit_denied_lines then
        for i in (select 'Status_X' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    else
        for i in (select 'Qry_Resolution' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    end if;
end;
declare
    submit_denied_lines   boolean := true;
    test                  char (1);
begin
    /* can't use boolean in the SQL engine */
    if (submit_denied_lines) then
        test := '1';
    else
        test := '0';
    end if;

    for i
        in (select *
              from user_objects
             where (user_objects.object_type = 'TABLE' and test = '1') or (user_objects.object_type = 'VIEW' and test = '0')) loop
        dbms_output.put_line (i.object_name);
    end loop;
end;
如果select子句相同,但where子句不同,则为一个这是可运行的

declare
    submit_denied_lines   boolean := true;
begin
    if submit_denied_lines then
        for i in (select 'Status_X' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    else
        for i in (select 'Qry_Resolution' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    end if;
end;
declare
    submit_denied_lines   boolean := true;
    test                  char (1);
begin
    /* can't use boolean in the SQL engine */
    if (submit_denied_lines) then
        test := '1';
    else
        test := '0';
    end if;

    for i
        in (select *
              from user_objects
             where (user_objects.object_type = 'TABLE' and test = '1') or (user_objects.object_type = 'VIEW' and test = '0')) loop
        dbms_output.put_line (i.object_name);
    end loop;
end;

你错过了很多信息。是相同的选择,但标准不同吗?(where子句)或完全不同的

这是一种完全不同的方法这是可运行的

declare
    submit_denied_lines   boolean := true;
begin
    if submit_denied_lines then
        for i in (select 'Status_X' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    else
        for i in (select 'Qry_Resolution' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    end if;
end;
declare
    submit_denied_lines   boolean := true;
    test                  char (1);
begin
    /* can't use boolean in the SQL engine */
    if (submit_denied_lines) then
        test := '1';
    else
        test := '0';
    end if;

    for i
        in (select *
              from user_objects
             where (user_objects.object_type = 'TABLE' and test = '1') or (user_objects.object_type = 'VIEW' and test = '0')) loop
        dbms_output.put_line (i.object_name);
    end loop;
end;
如果select子句相同,但where子句不同,则为一个这是可运行的

declare
    submit_denied_lines   boolean := true;
begin
    if submit_denied_lines then
        for i in (select 'Status_X' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    else
        for i in (select 'Qry_Resolution' as t from dual) loop
            dbms_output.put_line (i.t);
        end loop;
    end if;
end;
declare
    submit_denied_lines   boolean := true;
    test                  char (1);
begin
    /* can't use boolean in the SQL engine */
    if (submit_denied_lines) then
        test := '1';
    else
        test := '0';
    end if;

    for i
        in (select *
              from user_objects
             where (user_objects.object_type = 'TABLE' and test = '1') or (user_objects.object_type = 'VIEW' and test = '0')) loop
        dbms_output.put_line (i.object_name);
    end loop;
end;

你在用这个查询做什么?您可能需要一个存储函数,该函数接受一个布尔参数并返回一个
sys\u refcursor
。然后,您的SQLPlus脚本将声明一个本地
sys\u refcursor
变量,SQLPlus知道如何
print
谢谢,我已经很高兴问了,因为现在我可以阅读
sys\u refcursor
s了。我不确定这是否是您的“您在用查询做什么”问题的答案,但这两个查询中的每一个都会为我的同事输入的索赔编号提取16+列索赔数据。如果Submit_Denied_Lines=False,则其中一列将为Status_X,查询将包含一些额外代码,以仅获取索赔的最新状态。否则,其中一列将为resolution,它总是只显示当前状态。这是您的同事执行的
SQL*Plus
脚本,用于运行查询并将结果打印到屏幕上吗?将数据假脱机到文件?是否将数据写入另一个表?这就是我在问你对数据做了什么时要问的问题。谢谢你的澄清!查询将结果打印到屏幕上,然后程序(Benthic's Golden)将数据导出到Excel。所以它不是SQLPlus脚本?这就是“海底生物的黄金”所运行的东西?或者你是说你有一个SQLPlus脚本,将数据写入屏幕,然后Benthic's Golden从屏幕刮片导入数据?你对查询做了什么?您可能需要一个存储函数,该函数接受一个布尔参数并返回一个
sys\u refcursor
。然后,您的SQLPlus脚本将声明一个本地
sys\u refcursor
变量,SQLPlus知道如何
print
谢谢,我已经很高兴问了,因为现在我可以阅读
sys\u refcursor
s了。我不确定这是否是您的“您在用查询做什么”问题的答案,但这两个查询中的每一个都会为我的同事输入的索赔编号提取16+列索赔数据。如果Submit_Denied_Lines=False,则其中一列将为Status_X,查询将包含一些额外代码,以仅获取索赔的最新状态。否则,其中一列将为resolution,它总是只显示当前状态。这是您的同事执行的
SQL*Plus
脚本,用于运行查询并将结果打印到屏幕上吗?将数据假脱机到文件?是否将数据写入另一个表?这就是我在问你对数据做了什么时要问的问题。谢谢你的澄清!查询将结果打印到屏幕上,然后程序(Benthic's Golden)将数据导出到Excel。所以它不是SQLPlus脚本?这就是“海底生物的黄金”所运行的东西?或者你是说你有一个SQLPlus脚本将数据写入屏幕,然后Benthic's Golden从中导入数据,什么,屏幕擦伤?我是否正确理解在refcursor上使用此选项的好处是不必使用存储过程,但缺点是dbms_输出可能需要设置为on并指定大小才能使用?我更喜欢使用隐式游标而不是显式游标。您是在pl/sql块中执行此操作的吗?我是否正确地理解,使用此over refcursor的好处是您不必使用存储过程,但缺点是dbms_输出可能需要设置为on并指定大小才能使用?我更喜欢使用隐式游标而不是显式游标。您是在pl/sql块中执行此操作的吗?