首先在sqlplus中set serverout on 以打开显示至于输出,可以用dbms_output若在sqlplus中还可以用print
专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业郊区免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
DBMS_OUTPU.PUT_LINE是PL/SQL语言的输出语句。如果要想输出表中所有数据,要通过游标循环读逐条读出和输出。下面是一个简单例子:
BEGIN
FOR rec IN (SELECT * FROM emp) LOOP
dbms_output.put_line(rec.empno||rec.ename);
END LOOP;
END;
我创建的两个表
create table Users(
UserName varchar2(8) primary key,
password varchar2(8) not null,
qxno int,
foreign key(qxno) references qx(qxno)
);
create table Student(
StudentName varchar2(8) primary key,
password varchar2(8) not null,
name varchar2(20),
sex varchar2(4),
age int,
qxno int,
foreign key(qxno) references qx(qxno),
constraint chk_age check (age10 and age100)
);
我要实现的功能是,在向users表中插入数据时,如果qxno值为3,就向student中插入数据
触发器如下
create or replace trigger insert_users_tea
after insert on users
for each row
when(new.qxno=2)
insert into teacher(teachername,password,qxno)
values(:new.username,:new.passWord,:new.qxno)
/
插入数据时,提示ORA-04091: 表 ZYUAN.STUDENT 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "ZYUAN.INSERT_USERS_STU", line 1
ORA-04088: 触发器 'ZYUAN.INSERT_USERS_STU' 执行过程中出错
可用DBMS_OUTPUT.PUT_LINE()对存储过程的进行输出。
编写存储过程:
create or replace procedure test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 M then
dbms_output.put_line('输出SQL语句1');
elsif M 3 then
dbms_output.put_line('输出SQL语句2');
else
dbms_output.put_line('nothing');
end if;
end;
扩展资料;
存储在数据库的数据字典中,存储在当前的应用中安全性由数据库提供安全保证,必须通过授权才能使用存储子程序,安全性靠应用程序来保证,如果能执行应用程序,就能执行该子程序。模式描述IN参数用来从调用环境中向存储过程传递值,不能给IN参数赋值,给此参数传递的值可以是常量、有值的变量、表达式等。
参考资料来源:百度百科-Oracle存储过程
可以使用wm_concat()函数;
下面是我做的一个例子,可以参考下,当然具体语法可以百度,也可以去官方文档查:
SCOTT@ ysdb1show user
USER is "SCOTT"
SCOTT@ ysdb1create table test_concat(id number(5),name varchar2(10));
Table created.
SCOTT@ ysdb1insert into test_concat values(1,'a');
1 row created.
SCOTT@ ysdb1insert into test_concat values(1,'b');
1 row created.
SCOTT@ ysdb1insert into test_concat values(1,'c');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'q');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'w');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'e');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'f');
1 row created.
SCOTT@ ysdb1select * from test_concat;
ID NAME
---------- ----------
1 a
1 b
1 c
2 q
2 w
2 e
2 f
7 rows selected.
SCOTT@ ysdb1select wm_concat(name) from test_concat;
WM_CONCAT(NAME)
--------------------------------------------------------------------------------
a,b,c,q,w,e,f
SCOTT@ ysdb1select id,wm_concat(name) from test_concat group by id;
ID WM_CONCAT(NAME)
---------- --------------------------------------------------------------------------------
1 a,c,b
2 q,f,e,w