本人存储过程不太了解。现在我想实现写一个函数 这个函数能够被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 contextobject为什么不能用呢?因为公司不能上网,比较急 大家帮帮忙 谢谢。
返回 类似键值的结果集 即 字段名--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 contextobject为什么不能用呢?因为公司不能上网,比较急 大家帮帮忙 谢谢。
/*
表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;
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;
函数中执行spl然后返回类似
字段名 值 这样的集合列表,
谢谢。
对象类型可单独创建,就像建立表一样
但是我在调用编译时报下面错误
select * from table(函数名());
是什么问题呢?ora-22905:cannot access rows from a non-nested table item
使用表函数的时候,它的类型必须是schema级别的,也就是必须用create type..来创建嵌套表或其他类型
create or replace type testType as objecttype tab002 is table of testTypefunction然后就是上面的查询
这样写法不对吗?