我写了个type包,定义了几个属性,然后在包的里面又写了个存储过程,在存储过程里,给type包的属性赋值,在通过plsqldevelop调试的时候,发现给type包的属性赋值后,这些属性的值却没有变,为什么啊?
是不是赋值的方法不对?谁能给指点一下?
是不是赋值的方法不对?谁能给指点一下?
解决方案 »
- oracle 分区表 即查询的2个问题
- Oracle存储过程问题
- oracle存储过程中,未找到数据异常。。前辈们帮我看看吧。。。。
- 哪位熟悉OracleMigrationWorkbench-ORACLE数据迁移工具的安装使用?
- 一个查询语句?难
- 高分求教,关于Job环境参数配置的问题~
- 我怎样才能找到导入oracle 9i的表啊?
- 在存储过程中讲一个表的数据插入到另一个表中,如何实现?
- insert into test1 select * from test2 为何不行呢?oracle9i
- 请高手指教oracle for linux red hat7.2的問題
- 编译package
- 数据库左联接问题,为何WHERE条件中不能添加右边表的查询条件?
包头部分:
create or replace type tp_1 as
m_test1 varchar2(6);//包的一个属性 member procedure testprc(p_test1 varchar2(6))
end;
包体部分:
create or replace type body tp_1 asprocedure testprc(p_test1 varchar2(6)) is
begin
m_test1:=p_test1//在调试的时候,到这一步,发现提示m_test1不是变量,在plsqldeveloper中的
//变量监视窗口显示p_test1的值并没有付给m_test1,为什么呀?
end;测试这个包的存储过程的部分:
create or replace procedure testtp_1 as
vtp_1 tp_1;
begin
vtp_1.testprc('200601');
end;经过调试发现,'200601'并没有传给m_test1为什么呀?
//变量监视窗口显示p_test1的值并没有付给m_test1,为什么呀? m_test1前面要加包名吧。
create or replace type tp_1 as
似乎是创建一个类型。楼主可能记错了,是
create or replace package tp_1 as
2 m_test1 varchar2(6);
3 procedure testprc(p_test1 varchar2);
4 end;
5 /程序包已创建。SQL> create or replace package body tp_1 as
2 procedure testprc(p_test1 varchar2 ) is
3 begin
4 tp_1.m_test1:=p_test1;
5 dbms_output.put_line(tp_1.m_test1);
6 end;
7 end;
8 /程序包主体已创建。SQL>
SQL> exec tp_1.testprc('asdf');
asdfPL/SQL 过程已成功完成。
包头是这样的create or replace type tp_1 under supertp_1 as
m_test1 varchar2(6);//包的一个属性 member procedure testprc(p_test1 varchar2(6))
end;
supertp_1的代码记不太清了,但我觉着跟我的问题没关系
自定义类型的属性赋值,只能在外部,内部会报错 PLS-00363: expression 'SELF.SP2' cannot be used as an assignment target。但是内部可以使用在外部赋的值。
具体如下赋值:
SQL> CREATE OR REPLACE TYPE supertp as OBJECT(
2 sp1 varchar2(6),
3 MEMBER FUNCTION YEN (rate IN NUMBER) RETURN NUMBER
4 ) not final;
5 /类型已创建。SQL>
SQL> CREATE OR REPLACE TYPE BODY supertp is
2 MEMBER FUNCTION YEN(RATE IN NUMBER) RETURN NUMBER
3 IS
4 BEGIN
5 RETURN RATE*100;
6 END;
7 end;
8 /类型主体已创建。SQL>
SQL> create or replace type tp_c under supertp(
2 sp2 varchar2(6),
3 MEMBER FUNCTION YEN1 (rate IN NUMBER) RETURN NUMBER
4 );
5 /类型已创建。SQL>
SQL> CREATE OR REPLACE TYPE BODY tp_c is
2 MEMBER FUNCTION YEN1(RATE IN NUMBER) RETURN NUMBER
3 IS
4 BEGIN
5 dbms_output.put_line(self.sp2);
6 RETURN RATE*100;
7 END;
8 end;
9 /类型主体已创建。SQL>
SQL> declare
2 a tp_c;
3 b number;
4 begin
5 a:= tp_c('aaaa','bbbb');
6 dbms_output.put_line(a.sp2);
7 a.sp2 :='aaaa1';
8 b :=a.yen1(100);
9 dbms_output.put_line(a.sp2);
10 dbms_output.put_line(b);
11 end;
12 /
bbbb
aaaa1
aaaa1
10000PL/SQL 过程已成功完成。