读书人

问个触发器小疑点

发布时间: 2012-12-17 09:31:40 作者: rapoo

问个触发器小问题
想了解oracle job的用法

在PLSQL中创建触发器的适合报错
大家看红色重点标注的地方

Compilation errors for TRIGGER YLB2012.TRI_TEST_ID

Error: PLS-00103: 出现符号 "?"在需要下列之一时:
begin function
pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior
Line: 5
Text: ??nextid?number;

求高手帮忙解释啊 小弟刚学oracle1个星期 求老鸟多多指教
我网上找了个例子
3.实例 这里提供了一个简单的例子,主要是完成在每一个时间间隔内向一个表中插入一条记录 ? 1)创建测试表?
Java代码 ?
? ??
?SQL>???create???table???test(id?number,cur_time???date);?? ??
??表已创建。 ??
建sequence ??
-- Create sequence
create sequence TEST_SEQUENCE
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 10;

SQL> create table test(id number,cur_time date);
表已创建。
----建sequence
CREATE SEQUENCE test_sequence
INCREMENT BY 1   -- 每次加几个
START WITH 1    -- 从1开始计数
NOMAXVALUE    -- 不设置最大值
NOCYCLE      -- 一直累加,不循环
CACHE 10 ;
--建触发器代码为:
Java代码
?
create or replace trigger tri_test_id
before insert on test --test 是表名
for each row
declare
nextid number;
begin
IF :new.id IS NULLor :new.id=0 THEN --id是列名
select test_sequence.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.id:=nextid;
end if;
end tri_test_id;
???
?? ? 2)创建一个自定义过程?
Java代码 ?
??
SQL>???create???or???replace???procedure???proc_test???as?? ??
?????2?????begin?? ??
?????3?????insert???into???test(cur_time)???values(sysdate);?? ??
?????4?????end;?? ??
?????5?????/ ??
???

SQL> create or replace procedure proc_test as
2 begin
3 insert into test(cur_time) values(sysdate);
4 end;
5 /

? 过程已创建。? ?? ? 3)创建JOB?
Java代码 ?
SQL>?declare?job1?number; ??
?????begin ??
????????dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次 ??
????end;??


SQL> declare job1 number;
begin
dbms_job.submit(job1,'proc_test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次
end;
?? ? PL/SQL?? JOB已成功完成。?在PLSQL中创建触发器的适合报错

Compilation errors for TRIGGER YLB2012.TRI_TEST_ID

Error: PLS-00103: 出现符号 "?"在需要下列之一时:
begin function
pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior
Line: 5
Text: ??nextid?number;

求高手帮忙解释啊 小弟刚学oracle1个星期 求老鸟多多指教



[最优解释]
IF :new.id IS NULLor :new.id=0 THEN --id是列名
又是粗心惹的祸,这一句,NULL和or之间加个空格

create or replace trigger tri_test_id   
before insert on test --test 是表名
for each row
declare
nextid number;
begin
IF :new.id IS NULL or :new.id=0 THEN --id是列名
select test_sequence.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.id:=nextid;
end if;
end tri_test_id;

读书人网 >oracle

热点推荐