rs.*_*rs. 0 sql oracle plsql stored-procedures oracle10g
我写了一个包来查询表中的行.此选择查询将调用其他函数并返回表中的所有行.但是当我编写一个包含所有函数和sprocs的包时,我的带有select语句的sproc给了我一个错误,说我不能在没有语句的情况下执行.但如果我使用它然后它将只返回一行.如何使用oracle sp检索所有行?
Procedure GetData As
BEGIN
Select Jobid, JobName, JobLocation, JobCompany, X(jobid) FROM jobsTable; END GetData;
END;
Run Code Online (Sandbox Code Playgroud)
我不得不改变它以使错误消失:
Procedure GetData As
r_Jobid jobsTable.jobid%type;
r_JobName jobsTable.jobName%type;
r_JobLocation jobsTable.jobLocation%type;
r_temp varhar2(10);
BEGIN
Select Jobid, JobName, JobLocation, JobCompany, X(jobid)
INTO r_jobid, r_jobName, r_jobLocation, r_temp
FROM jobsTable;
END GetData;
END;
Run Code Online (Sandbox Code Playgroud)
这是从函数返回多行的更好方法:
FUNCTION GET_DATA()
RETURN SYS_REFCURSOR IS
results_cursor SYS_REFCURSOR;
BEGIN
OPEN results_cursor FOR
SELECT t.jobid,
t.jobName,
t.joblocation,
t.jobcompany,
X(t.jobid)
FROM JOBSTABLE t;
RETURN results_cursor;
END;
Run Code Online (Sandbox Code Playgroud)
我同意afk,虽然这似乎不是你真正需要使用的.这是我建议使用游标:
CURSOR jobs IS
SELECT t.jobid,
t.jobName,
t.joblocation,
t.jobcompany,
X(t.jobid)
FROM JOBSTABLE t;
v_row jobs%ROWTYPE; --has to be declared AFTER the cursor to be able to reference the row type
BEGIN
OPEN jobs;
FETCH jobs INTO v_row;
IF jobs%FOUND THEN
--do stuff here, per row basis
--access columns in the row using: v_row.jobid/etc
END IF;
CLOSE jobs;
END;
Run Code Online (Sandbox Code Playgroud)
你知道吗:
Procedure GetData As
r_Jobid jobsTable.jobid%type;
r_JobName jobsTable.jobName%type;
r_JobLocation jobsTable.jobLocation%type;
r_temp varhar2(10);
Run Code Online (Sandbox Code Playgroud)
...意味着您定义了局部变量?您将无法从该过程中获取信息.如果你这样做,你需要参数,如下所示:
Procedure GetData(IO_R_JOBID IN OUT JOBSTABLE.JOBID%TYPE,
IO_R_JOBNAME IN OUT JOBSTABLE.JOBNAME%TYPE,
IO_R_JOBLOCATION IN OUT JOBSTABLE.JOBLOCATION%TYPE,
IO_R_TEMP IN OUT VARCHAR2(10)) AS
Run Code Online (Sandbox Code Playgroud)
我使用IO_来记录哪些参数是IN/OUT.我会在适用的地方使用IN_或OUT_.但是这里的关键是如果你想要一个参数退出来定义OUT.
此外 - 包只是程序和函数的逻辑分组,能够定义作用于包的常量.包本身不执行任何SQL - 它仍然是正在执行的函数或过程.上帝,我希望SQL Server有包...
归档时间: |
|
查看次数: |
3165 次 |
最近记录: |