小弟菜鸟 请高手帮帮忙!oracle id自增 触发器无法创建

wwwhghhao12345 2011-09-19 11:17:59
conn / as sysdba
//建表
create table userinfo (
userid number(8) primary key,
username varchar2(16) not null,
pwd varchar2(20)
);
//创建序列
create sequence userinfo_seq minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 cache 20;
//创建触发器
CREATE OR REPLACE TRIGGER "userinfo_trig"
BEFORE INSERT ON userinfo
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
END userinfo_trig;

在创建触发器时, 分号不起作用。这是为什么?
...全文
110 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxyzxq2008 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wwwhghhao12345 的回复:]

什么情况下才是 sql window ? 什么情况下又是 command window ? 麻烦 告诉我下呗!
[/Quote]
你要在command窗口中执行,结束符号要用'/'
如果在sql窗口中,直接分号就可以了!
看了你后面的描述才知道你真正的问题阿~~
wwwhghhao12345 2011-09-20
  • 打赏
  • 举报
回复
恩 谢啦 问题解决了 !!
demonat 2011-09-19
  • 打赏
  • 举报
回复
input /
wwwhghhao12345 2011-09-19
  • 打赏
  • 举报
回复
to canhui87
还是不行啊!
到创建触发器的时候 还是可以无限回车
wwwhghhao12345 2011-09-19
  • 打赏
  • 举报
回复
to jimmylin040
创建表和序列的时候都有创建成功的提示,创建触发器SQL> CREATE OR REPLACE sql>TRIGGER "userinfo_trig"
2 BEFORE INSERT ON userinfo
3 REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
4 DECLARE
5 BEGIN
6 SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
7 END userinfo_trig;
8 ;
9
10
11
可以无限回车。。。
lxyzxq2008 2011-09-19
  • 打赏
  • 举报
回复

//创建触发器
CREATE OR REPLACE TRIGGER "userinfo_trig"
BEFORE INSERT ON userinfo
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
END userinfo_trig;

--ps:你这个问题不在于分号吧,是你的创建有问题阿,看楼上的例子
虫洞 2011-09-19
  • 打赏
  • 举报
回复
分号不起作用?
什么意思,你是问触发器的代码问题还是序列使用的问题

给你个例子吧,反正我平时都是用这个来用序列的

首先:在oracle里创建序列
create sequence R_STAFF_ROLE_SEQ //序列名
minvalue 1 //最小值
maxvalue 99999999999 //最大值,一般这个足够用
start with 1 //开始值
increment by 1 //增量
cache 20 //缓存大小
order;

建表
CREATE TABLE test (
id number(11) primary key,
val varchar2(16)
);


其次:在oracle里编写触发器
CREATE OR REPLACE TRIGGER TRI_R_STAFF_ROLE
BEFORE INSERT ON R_STAFF_ROLE
FOR EACH ROW
BEGIN
SELECT R_STAFF_ROLE_SEQ.NEXTVAL
INTO :NEW.ID
FROM DUAL;
END ;

插入值
insert into admin(val) VALUES ('test1');
commit;
jimmylin040 2011-09-19
  • 打赏
  • 举报
回复
分号不起作用的意思是?
你先执行建表SQL,再执行建立序列SQL,最后执行建触发器的SQL有没有问题?
demonat 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 demonat 的回复:]

input /
[/Quote]

in sqlplus, input / at the end.
like :
CREATE OR REPLACE TRIGGER "userinfo_trig"
BEFORE INSERT ON userinfo
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT userinfo_seq.NEXTVAL INTO :NEW.userid FROM DUAL;
END userinfo_trig;
/

if you have a tool such as pl/sql developer, you can open a sql window instead of a command window.
also you can input a '/' in command window to execute your trigger creation statement...
wwwhghhao12345 2011-09-19
  • 打赏
  • 举报
回复
什么情况下才是 sql window ? 什么情况下又是 command window ? 麻烦 告诉我下呗!
wwwhghhao12345 2011-09-19
  • 打赏
  • 举报
回复
苏苏大侠
能不能说具体点啊, 我才开始学编程, sql window 和 command window 还真没接触过 网上查了下 不过也找不到具体的例子!
谢谢啦 !!!
咖啡 2011-09-19
  • 打赏
  • 举报
回复
放错地方了,呵呵,你在sqlwindow中执行,不要放在command window中
wwwhghhao12345 2011-09-19
  • 打赏
  • 举报
回复
大虾们 帮帮忙啊 ! 谢谢啦!

17,377

社区成员

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

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