使用ACCEPT、CASE在pl/sql中创建游标
我正在尝试创建一个脚本,允许用户在收集学生联系信息时从ACCEPT中选择要使用的案例群使用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
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。。。???根据输入的选择,它将运行特定的选择脚本来创建人口组光标列表