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 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile