Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
使用ACCEPT、CASE在pl/sql中创建游标_Sql_Oracle_Plsql - Fatal编程技术网

使用ACCEPT、CASE在pl/sql中创建游标

使用ACCEPT、CASE在pl/sql中创建游标,sql,oracle,plsql,Sql,Oracle,Plsql,我正在尝试创建一个脚本,允许用户在收集学生联系信息时从ACCEPT中选择要使用的案例群 PROMPT 'Select a popluation for emails' PROMPT '1. Currently registered' PROMPT '2. New Applicants' PROMPT ACCEPT cnt number PROMPT 'Selection: '; ... CURSOR stu_lst IS CASE &cnt WHEN 1 THEN -- C

我正在尝试创建一个脚本,允许用户在收集学生联系信息时从ACCEPT中选择要使用的案例群

PROMPT 'Select a popluation for emails'
PROMPT '1. Currently registered'
PROMPT '2. New Applicants'
PROMPT
ACCEPT cnt number PROMPT 'Selection: ';
...
CURSOR stu_lst IS  
CASE &cnt
    WHEN 1 THEN  -- Current registered students.
        select distinct SFRSTCA_PIDM pidm
        from   SFRSTCA
        where  SFRSTCA_TERM_CODE = '201403' and
               SFRSTCA_LEVL_CODE = '01' and
               SFRSTCA_RSTS_CODE = 'RE';
    WHEN 2 THEN  -- New applicants
        select app_pidm pidm
        from   app
        where  app_term = 'Fall 2014';
    ELSE
        -- Incorrect selection.
        DBMS_OUTPUT.PUT_LINE('Incorrect selection made.');
        exit;
    END;
END;

假设两个查询返回相同的数据类型,您可以使用union和过滤器来检查每个部分中的变量;比如:

DECLARE
  CURSOR stu_lst IS
    -- Current registered students.
    select distinct SFRSTCA_PIDM pidm
    from   SFRSTCA
    where  &cnt = 1 and
           SFRSTCA_TERM_CODE = '201403' and
           SFRSTCA_LEVL_CODE = '01' and
           SFRSTCA_RSTS_CODE = 'RE';
    UNION ALL
    -- New applicants
    select app_pidm
    from   app
    where  &cnt = 2 and
           app_term = 'Fall 2014';

  invalid_argument EXCEPTION;
  ...
BEGIN
  IF &cnt NOT IN (1, 2) THEN
    RAISE invalid_argument;
  END IF

  FOR rec IN stu_lst LOOP
    h_pidm := rec.pidm;
    ...
  END LOOP;

EXCEPTION
  WHEN invalid_argument THEN
    dbms_output.put_line('Incorrect selection made.');
END;
/

您还可以声明一个游标变量,并在块主体内的case语句中使用适当的查询打开该变量。但是,这与您的显式游标语法保持一致。

摘录的可能副本没有使用游标-您将如何处理它?您是否真的需要PL/SQL和游标,或者您正试图查询适当的表并显示结果,所以纯SQL就可以了?您是否曾经编写过SQL脚本,只是为了让某人需要相同的数据,只是为了不同的人群。然后一两个月后,原始请求返回。然后其他人会想要相同的日期,但他们想要第三个人口。一直以来,你只是对脚本做一些小的调整,因为这样做更容易。我不知道这和我的要求有什么关系。。。我正在检查您是否需要PL/SQL,因为您正在处理来自游标的数据;或者,如果您只是显示它。我想能够运行脚本,请选择1,2,3。。。???根据输入的选择,它将运行特定的选择脚本来创建人口组光标列表