在SQL Commands
OracleApex
应用程序部分,当我运行以下命令时,它仅返回sysdate
函数名称,而不是当前日期。为什么?
SELECT sysdate from dual;
OR
SELECT sysdate from sys.dual;
输出:系统日期
在SQL Commands
OracleApex
应用程序部分,当我运行以下命令时,它仅返回sysdate
函数名称,而不是当前日期。为什么?
SELECT sysdate from dual;
OR
SELECT sysdate from sys.dual;
输出:系统日期
尝试:
1. 使用别名
Oracle APEX 可能会显示函数名称而不是执行它。
SELECT sysdate AS current_date FROM dual;
2. 确保你处于正确的模式
Oracle APEX 的 SQL 命令部分运行分配给您的工作区的架构中的查询。如果 DUAL 缺失或无法访问,请尝试:
SELECT sysdate FROM SYS.DUAL;
如果这仍然不起作用,请确保您的模式可以访问 DUAL。
3.使用 TO_CHAR 函数
如果 APEX 的输出格式不正确,则明确将其转换为字符串格式可能会有效:
SELECT TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') AS current_date FROM dual;
回复评论:
运行以下查询:
SELECT * FROM dual;
或者
SELECT * FROM sys.dual;
如果您收到“表或视图不存在”之类的错误,那么您就无权访问 DUAL。
您还可以检查您的用户权限
运行这个:
SELECT * FROM all_tables WHERE table_name = 'DUAL';
如果没有返回任何行,那么您可能没有所需的访问权限。
检查你的模式中是否存在 DUAL
运行这个:
SELECT owner, table_name FROM all_tables WHERE table_name = 'DUAL';
这将显示哪个架构拥有 DUAL 表
不确定你是怎么做到的,但这对我来说很好。我运行了以下语句:
我在 APEX SQL Workshop (apex.oracle.com) 和 sqlcl (我自己的 19c db) 中都得到了相同的预期输出。获取字符串
sysdate
作为输出的唯一方法是将其引用,如下所示。您接受了答案,但我没有看到您发现了什么——原因是什么?
我在想:也许你应该将分隔线(编辑器和结果窗格之间的分隔线)向上移动,这样才能真正显示查询结果?像这样:
或许,事实确实如此?
回答@PaulW 关于从 DUAL 表中删除一行的评论:普通用户无法执行此操作,但 SYS 肯定可以。不过,我不认为@nam 这样做了。