oracle的几个问题

wx_zhang 2001-08-28 06:13:58
1、怎么给数组赋值?
create or replace procedure test as
type arr is array(1000) of varchar2(10);
tt arr;
i integer;
begin
i:=1;
loop
tt(i):='test'; ///这句有问题。
i:=i+1;
exit when i > 1000;
end loop;
end;
在编译时没有错误,执行的时候报错:

Reference to uninitialized collection

什么意思?

2、怎么看当前数据库中正执行那些过程、触发器?我现在怀疑有一个触发器死锁了,可不知道怎么去确定,怎么去杀死这个触发器。
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cod_aas 2001-09-10
  • 打赏
  • 举报
回复
CREATE Procedure TEST
AS
type arr is table of varchar2(10) INDEX BY BINARY_INTEGER;
tt arr;
i integer;
begin
i:=1;
loop
tt(i) := 'test';
dbms_output.put_line(to_char(i) ¦¦ ':' ¦¦ tt(i));
i:=i+1;
exit when i > 1000;
end loop;
end;
/

原来,dbms_output 在这用呀
KingSunSha 2001-08-29
  • 打赏
  • 举报
回复
在ORACLE8以前的版本,只有TABLE类型,其实TABLE类变量就是通常所说的数组
wx_zhang 2001-08-29
  • 打赏
  • 举报
回复
to joe225:

还是不对,Subscript beyond count。我估计是只初始化了一个数组元素。

to KingSunSha:Table和建的表是一回事吗?是不是内存操作?

to cxgtommy: v$session中好象没有进程的名字,只有ID,

SADDR RAW(8)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(8)
USER# NUMBER
USERNAME VARCHAR2(30)
COMMAND NUMBER
OWNERID NUMBER
TADDR VARCHAR2(16)
LOCKWAIT VARCHAR2(16)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(9)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(10)
PROGRAM VARCHAR2(48)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(8)
SQL_HASH_VALUE NUMBER
PREV_SQL_ADDR RAW(8)
PREV_HASH_VALUE NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK# NUMBER
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)

比如我现在执行一个test的存储过程,怎么去查它的情况?
Tommy Chang 2001-08-28
  • 打赏
  • 举报
回复
BTW, if u want to kill any process in oracle world, u can use "alter database kill...." syntax. U can check that up, i'd not touch oracle database for years.

:)
Tommy Chang 2001-08-28
  • 打赏
  • 举报
回复
select * from v$session
u can find all of client's or in-process proceid,serial#.

:)

Table is more like arry in other language.
joe225 2001-08-28
  • 打赏
  • 举报
回复
你可以把tt arr;改为tt arr:=arr('');
我也说不上原理,不过这样可以通过
joe225 2001-08-28
  • 打赏
  • 举报
回复
你引用了未初始化的集合
KingSunSha 2001-08-28
  • 打赏
  • 举报
回复
1, 我不熟悉ARRAY的用法, 下面的过程用TABLE类型, 调试通过
CREATE Procedure TEST
AS
type arr is table of varchar2(10) INDEX BY BINARY_INTEGER;
tt arr;
i integer;
begin
i:=1;
loop
tt(i) := 'test';
dbms_output.put_line(to_char(i) || ':' || tt(i));
i:=i+1;
exit when i > 1000;
end loop;
end;
/

2,这个问题不是特别清楚, 想必是去查动态数据字典,什么V$PROCESS之类的
wx_zhang 2001-08-28
  • 打赏
  • 举报
回复
不对吧,我是要向数组中赋值的
pausing 2001-08-28
  • 打赏
  • 举报
回复
drop trigger trigger name
to_char(i)='test'

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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