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

标签 sql oracle plsql oracle11g

    CREATE OR REPLACE PROCEDURE TESTPROC
IS
   l_update_str   VARCHAR2 (4000);
BEGIN
   l_update_str :=
      'UPDATE XX_TABLE 
             last_update_date = ''' || SYSDATE || ''',
       WHERE     1=1';

   EXECUTE IMMEDIATE l_update_str;
END;
/

我在上面试过,但它不起作用。我也尝试过使用 to_date(to_char(sysate)) 但缺少时间戳

最佳答案

I have aslo tried using to_date(to_char(sysate)) but the time stamp is missing



这样做没有意义。

为什么要使用 PL/SQL 来完成这样一项微不足道的任务。用普通的 SQL 来做。 的简单语法更新 声明是——
UPDATE table_name SET column_name = SYSDATE WHERE <conditions>
要显示日期列,只需使用 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。

'UPDATE XX_TABLE last_update_date = ''' || SYSDATE || ''', WHERE 1=1';


  • 首先,更新语法 是错的。 套装缺少关键字。
  • 其次,您不能像在动态 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 值,而不是实际使用关键字 系统日期 .

    所以,你需要稍微改变一下动态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>
    

    现在上面的方法可以正常工作。

    关于sql - 如何使用 sysdate 更新日期列,包括动态 sql 中的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314350/

    相关文章:

    sql - 根据类型创建表

    sql - 将列中的文本规范化为表的最有效方法是什么?

    mysql - 在 Cakephp 中从数据库中选择数据不起作用

    MySQL 选择具有最新日期的记录

    Oracle 数据库中的 REGEXP 挫败感

    sql - 在Oracle SQL Developer中按相对路径执行脚本

    在值之间插入的 SQL 查询

    oracle - Oracle PL/SQL 脚本中的这个斜杠字符是错误的吗?

    php - 命名参数、缓存和 PDO

    oracle - 调用HTTP页面时如何给出用户名和密码?