oracle 更新sysdate,如何使用sysdate更新日期列,包括动态sql中的时间戳

Lalit Kumar ..

9

我已经尝试使用to_date(to_char(sysate)),但缺少时间戳

这样做是没有意义的.

为什么PL/SQL执行这么简单的任务.在纯SQL中执行此操作.UPDATE语句的简单语法是 -

UPDATE table_name SET column_name = SYSDATE WHERE

要显示日期列,只需使用TO_CHAR和正确的格式模型.

SELECT TO_CHAR(column_name, 'MM/DD/YYYY HH24:MI:SS') FROM table_name;

例如,

SQL> create table t(a date);

Table created.

SQL> insert into t values(sysdate - 10);

1 row created.

SQL> select * from t;

A

---------

25-JAN-15

SQL> update t set a = sysdate;

1 row updated.

SQL> select to_char(a, 'mm/dd/yyyy hh24:mi:ss') dt from t;

DT

-------------------

02/04/2015 11:29:21

SQL>

关于动态SQL的更新.

'更新XX_TABLE last_update_date ='''|| SYSDATE || ''',1 = 1';

首先,更新语法错误.该SET关键字缺少.

其次,您不能在动态SQL中使用SYSDATE.

由于您正在构建动态sql,sysdate值将附加到SQL.测试任何动态sql的最佳方法是使用DBMS_OUTPUT并查看动态SQL是否正确形成.

例如,

SQL> CREATE OR REPLACE

2 PROCEDURE TESTPROC

3 IS

4 l_update_str VARCHAR2 (4000);

5 BEGIN

6 l_update_str := 'UPDATE t

7 SET a = ' || SYSDATE;

8 --EXECUTE IMMEDIATE l_update_str;

9

10 DBMS_OUTPUT.PUT_LINE(l_update_str);

11 END;

12 /

Procedure created.

SQL> exec testproc;

UPDATE t

SET a = 02/04/2015 11:46:53

PL/SQL procedure successfully completed.

SQL>

那么,你看到SQL形成了吗?附加SYSDATE值,而不是实际使用关键字SYSDATE.

所以,你需要稍微改变动态sql.

SQL> CREATE OR REPLACE

2 PROCEDURE TESTPROC

3 IS

4 l_update_str VARCHAR2 (4000);

5 BEGIN

6 l_update_str := 'UPDATE t

7 SET a = SYSDATE';

8 --EXECUTE IMMEDIATE l_update_str;

9

10 DBMS_OUTPUT.PUT_LINE(l_update_str);

11 END;

12 /

Procedure created.

SQL> exec testproc;

UPDATE t

SET a = SYSDATE

PL/SQL procedure successfully completed.

SQL>

现在上面的工作正常.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值