iteye_15325 2009-09-25 15:52
浏览 842
已采纳

oracle触发器语句找错(变量定义,赋值,条件判断)

[code="sql"]
CREATE OR REPLACE TRIGGER "d"

AFTER UPDATE ON "USER"

REFERENCING OLD AS "USER_BEFORE_UPDATED" NEW AS "USER_AFTER_UPDATED"

FOR EACH ROW

DECLARE
OLD_SERVICE VARCHAR2(20);
TIME_D NUMBER;
SERVICE_NAME VARCHAR2(20);
SERVICE_NAME := 'TERMINATE';

BEGIN

--user表的CURRENT_MODE字段被更新为TERMINATE
IF :USER_BEFORE_UPDATED.CURRENT_MODE <> :SERVICE_NAME and :USER_AFTER_UPDATED.CURRENT_MODE = :SERVICE_NAME THEN

--查询user的service名字

:OLD_SERVICE := select SERVICENAME from SERVICE WHERE USER_ID = :USER_AFTER_UPDATED.USER_ID;

--计算当前时间的long型值
:TIME_D := select (sysdate - 8 / 24 - to_date('1970-01-01', 'yyyy-mm-dd')) * 86400000 from dual;

--根据以上数据插入info表一条记录
INSERT INTO INFO VALUES ( :TIME_D,:OLD_SERVICE,'N',:USER_AFTER_UPDATED.USER_NAME);
END IF;

END;
[/code]
[size=medium]本意是:当更新user表的时候,触发事件:当user表的CURRENT_MODE字段被更新为TERMINATE时,执行code,首先查询user的service,计算当前时间的long型值,根据以上数据插入info表一条记录。

这里有一些错误,大家就当是看伪代码,请大家纠错! :D 

这里涉及到的问题有:
1 触发器中如何定义一个变量,然后给他赋一个varchar2的值?
2 如何将sql的查询结果赋值给变量
3 如何在代码块中使用变量

另外希望大家讨论讨论oracle调试命令的好工具[/size]

  • 写回答

2条回答 默认 最新

  • lggegegmail 2009-09-25 17:44
    关注

    1 定义一个变量:
    DECLARE
    SERVICE_NAME VARCHAR2(20);

    2 赋值
    直接赋值 SERVICE_NAME := '123'
    查询赋值 SELETE NAME INTO SERVICE_NAME FROM A

    3 代码块中用变量是不可以的, 也必须写在DECLARE下面

    1. 调试工具: PLSQL 或 TOAD
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思