该函数功能是这样的:当输入一个部门编号时,输出该部门的员工的所有信息。(oracle自带scott用户下的emp表)
create or replace function c_re(v_deptno in emp.deptno%type) return c_cursor
is
c_cursor cursor;
cursor c_cursor is select * from emp where deptno=v_deptno;
v_emp c_cursor%rowtype;
begin
open c_cursor;
fetch c_cursor into v_emp;
return v_emp;
close c_cursor;
end;
编译后第一行报错为:1 PLS-00320:此表达式的类型声明不完整或格式不正确,请好手指点。怎么改正?或写出你的函数也行
create or replace function c_re(v_deptno in emp.deptno%type) return c_cursor
is
c_cursor cursor;
cursor c_cursor is select * from emp where deptno=v_deptno;
v_emp c_cursor%rowtype;
begin
open c_cursor;
fetch c_cursor into v_emp;
return v_emp;
close c_cursor;
end;
编译后第一行报错为:1 PLS-00320:此表达式的类型声明不完整或格式不正确,请好手指点。怎么改正?或写出你的函数也行
解决方案 »
- exp语句错误
- 64位oracle不支持多层嵌套子查询???!!!
- Oracle10g 如何规划一个数据库呢?
- load data ???
- 求一个SQL语句
- 请问我该分配什么权限给用户,他才可以登陆Oracle Enterprise Manager Console中?
- 请教大侠:帮列几种存储过程返回记录集的例子,谢谢,第一次写oracle的存储过程
- linux下安装oracle 8 ,安装界面为乱码
- ORACLE
- 在oracle里,查询时,如何显示小数点前面的0 ? 4/7显示 0.57,非 .57
- ora 违反唯一约束条件错误 !!急啊!各位帮忙
- 程序执行到ExecuteNonQuery没反应了
create or replace function c_re(v_deptno in emp.deptno%type) return sys_refcursor
is
po_result sys_refcursor;
begin
open po_result for
select * from emp where deptno=v_deptno;
return po_result;
end;
这里sys_refcursor是一种游标的类型吗?那refcursor是什么呢?
CREATE OR REPLACE PROCEDURE sp_test (
p_outstr OUT VARCHAR2
,p_outint OUT NUMBER
,p_ref1 OUT SYS_REFCURSOR
,p_ref2 OUT SYS_REFCURSOR
)
AS
BEGIN
p_outstr := 'abc';
p_outint := '56789';
OPEN p_ref1 FOR SELECT ROWNUM*2 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
OPEN p_ref2 FOR SELECT ROWNUM*2+1 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
END sp_test;
/
过程已创建。 CREATE OR REPLACE PROCEDURE sp_test (
p_outstr OUT VARCHAR2
,p_outint OUT NUMBER
,p_ref1 OUT SYS_REFCURSOR
,p_ref2 OUT SYS_REFCURSOR
)
AS
BEGIN
p_outstr := 'abc';
p_outint := '56789';
OPEN p_ref1 FOR SELECT ROWNUM*2 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
OPEN p_ref2 FOR SELECT ROWNUM*2+1 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
END sp_test;/过程已创建。
利用print客户端打印,sqlplus下:Sql代码
SET AUTOPRINT ON
VAR p_outstr VARCHAR2(10);
VAR p_outint NUMBER;
VAR p_ref1 REFCURSOR;
VAR p_ref2 REFCURSOR; SET AUTOPRINT ON
VAR p_outstr VARCHAR2(10);
VAR p_outint NUMBER;
VAR p_ref1 REFCURSOR;
VAR p_ref2 REFCURSOR;
Sql代码
scott@ORCL>EXEC sp_test(:p_outstr,:p_outint,:p_ref1,:p_ref2);
PL/SQL 过程已成功完成。
RN
----------
3
5
7
9
11
13
15
17
19
21
23
已选择11行。
RN
----------
2
4
6
8
10
12
14
16
18
20
22
已选择11行。
P_OUTINT
----------
56789
P_OUTSTR
--------------------------------
abc scott@ORCL>EXEC sp_test(:p_outstr,:p_outint,:p_ref1,:p_ref2);PL/SQL 过程已成功完成。
RN
----------
3
5
7
9
11
13
15
17
19
21
23已选择11行。
RN
----------
2
4
6
8
10
12
14
16
18
20
22已选择11行。
P_OUTINT
----------
56789
P_OUTSTR
--------------------------------
abc 也可以在声明输入输出变量之后,依次print p_outstr,...........
type c_cursor is ref cursor;
v_mycur c_cursor;
完全可以用
v_mycur sys_refcursor;
来代替
type c_cursor is ref cursor;
v_mycur c_cursor;
完全可以用
v_mycur sys_refcursor;
来代替这里ref cursor是一种游标类型吗?能具体解释一下下面两句吗?
type c_cursor is ref cursor;
v_mycur c_cursor;
谢谢!
v_mycur c_cursor;--创建一个自定义游标(c_cursor)的变量v_mycur;
cursor c_cursor;我还觉得可以这样写:
type c_cursor is cursor;这里为什么要加ref?