求一oracle存储过程写法,请大家帮忙。

sunscok 2011-06-26 11:09:03
本人存储过程不太了解。

现在我想实现写一个函数 这个函数能够被java程序调用 也可以被 存储过程调用
返回 类似键值的结果集 即 字段名--value值

请大家帮帮忙 写个例子代码最好 谢谢。

另外 我在写 pl/sql代码时 查的网上的资料
create or replace type chipInResults IS object(
fk_pid number(12),
prizeLevel number(12),
formerNumber varchar2(10),
megaNumber varchar2(2)
);

再编译时 为什么报
pls-0054:object net supported in this context

object为什么不能用呢?

因为公司不能上网,比较急 大家帮帮忙 谢谢。
...全文
259 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
口水哥的包子 2011-07-06
  • 打赏
  • 举报
回复
mark
sunscok 2011-06-27
  • 打赏
  • 举报
回复
弄了一上午,还是没弄出来,各位再帮忙看看吧,谢谢。
sunscok 2011-06-27
  • 打赏
  • 举报
回复
这样啊,但是我在网上看见一种写法,是
create or replace type testType as object

type tab002 is table of testType

function

然后就是上面的查询
这样写法不对吗?
happy_bug 2011-06-27
  • 打赏
  • 举报
回复
mark 一下
hudingchen 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sunscok 的回复:]

各位好,我创建一个函数返回table数据
但是我在调用编译时报下面错误
select * from table(函数名());
是什么问题呢?

ora-22905:cannot access rows from a non-nested table item
[/Quote]

使用表函数的时候,它的类型必须是schema级别的,也就是必须用create type..来创建嵌套表或其他类型
sunscok 2011-06-27
  • 打赏
  • 举报
回复
顶~~
DBAFAN 2011-06-27
  • 打赏
  • 举报
回复
路过,学习了存储过程和函数的一些用法,谢谢!
sunscok 2011-06-27
  • 打赏
  • 举报
回复
各位好,我创建一个函数返回table数据
但是我在调用编译时报下面错误
select * from table(函数名());
是什么问题呢?

ora-22905:cannot access rows from a non-nested table item
hbdh1988 2011-06-26
  • 打赏
  • 举报
回复
2楼的例子太好了,顶
灰哥 2011-06-26
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE UPDATE_HIREDATE(IN_NAME IN VARCHAR2)
IS
IN_DEPNO VARCHAR2(10);
BEGIN
IN_DEPNO:='7369';
UPDATE EMP SET HIREDATE=TRUNC(SYSDATE)-7 WHERE DEPTNO = IN_DEPNO ;
COMMIT;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line('PROC->ERROR CODE : '||sqlcode||'ERROR MSG: '||UPPER(sqlerrm));
ROLLBACK;
END UPDATE_HIREDATE ;
END PCK_DOMAIN;
304的的哥 2011-06-26
  • 打赏
  • 举报
回复

/*
表A:会员信息表(会员号memberid,会员级别,享受折扣memberdis)
表B:收银信息表(会员号memberid,本次消费额spend,实付金额cost)
建一存储过程,向B中插入一条完整的数据,已知memberid和spend,
同时通过memberid从表A中得出memberdis,cost=memberdis*spend。
用函数实现计算cost,用存储过程实现调用函数向表B中插入一条完整的数据。
存储过程名proc_mem,包含两个输入参数memberid和spend,函数名function_mem
*/
--创建表
CREATE TABLE member_info(
memberid NUMBER,
memberlevel VARCHAR2(20),
memberdis NUMBER)
;
CREATE TABLE cost_info(
memberid NUMBER,
spend FLOAT,
COST FLOAT)
;

INSERT INTO member_info VALUES(1,'A',0.1);
INSERT INTO member_info VALUES(2,'A',0.2);
INSERT INTO member_info VALUES(3,'A',0.3);
INSERT INTO member_info VALUES(4,'A',0.4);
--创建函数
CREATE OR REPLACE FUNCTION function_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
RETURN FLOAT
IS
v_cost cost_info.COST%TYPE;
v_memberdis member_info.MEMBERDIS%TYPE;
BEGIN
SELECT memberdis INTO v_memberdis FROM member_info WHERE memberid = p_memeberid;
v_cost := v_memberdis* p_spend;
RETURN v_cost;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END ;
--创建procedure
CREATE OR REPLACE PROCEDURE proc_mem(p_memeberid member_info.MEMBERID%TYPE,p_spend cost_info.SPEND%TYPE)
IS
v_cost cost_info.COST%TYPE;
BEGIN
SELECT function_mem(p_memeberid,p_spend) INTO v_cost FROM dual;
INSERT INTO cost_info VALUES(p_memeberid,p_spend,v_cost);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
dbms_output.put_line(SQLERRM);

END;
----执行procedure
BEGIN
proc_mem(1,1000);
END;
ChiChengIT 2011-06-26
  • 打赏
  • 举报
回复
object关键字会报错的
sunscok 2011-06-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bobo12082119 的回复:]

package里面一般是定义游标,声明函数,声明过程;
对象类型可单独创建,就像建立表一样
[/Quote]

哦,也是和包一起写编译就行了吗?
304的的哥 2011-06-26
  • 打赏
  • 举报
回复
package里面一般是定义游标,声明函数,声明过程;
对象类型可单独创建,就像建立表一样
sunscok 2011-06-26
  • 打赏
  • 举报
回复
我上面提到的object的编译错误是我在package中定义的原因吗?
zhaodalong 2011-06-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hbdh1988 的回复:]

2楼的例子太好了,顶
[/Quote]
sunscok 2011-06-26
  • 打赏
  • 举报
回复
谢谢大家的回答,我现在相实现的是
函数中执行spl然后返回类似
字段名 值 这样的集合列表,
谢谢。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧