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>
现在上面的工作正常.