使用 SQLPlus 时,有什么方法可以获取 SQL 语句的语法?
Is there any way to get the syntax of an SQL statement when using SQLPlus?
我有一个使用 SQLPlus 的考试,有时我不记得 SQL 语句的确切语法,所以我想知道是否有任何方法可以从里面 SQLPlus.
例如,假设我忘记了如何使用 INSERT INTO,我需要这样的提醒:
INSERT INTO table-name (column-names)
VALUES (values)
这可能吗?
我尝试了 HELP 命令,但 none 似乎符合我的需要。
我用谷歌搜索没有成功。
没有。 SQL 是一种标准化语言(至少是 ANSI SQL)并且 SQLPlus "just" 使用该语法,因此内部帮助不涵盖它。内部帮助仅列出 SQL加上特定命令(例如 SET、CONNECT、SPOOL)。
可以通过某种方式解决该问题,但非常有限。您可以为某些现有对象调用 dbms_metadata.get_ddl
函数。其中一些 DDL 可能包含您感兴趣的语句。例如 - 您希望看到 select 语句 - 然后您可以为某些现有视图调用 dbms_metadata.get_ddl
:
select dbms_metadata.get_ddl('VIEW', 'USER_TABLES', 'SYS')
from dual;
请注意 - 它仅适用于 Oracle 11G 及更低版本,在最新的 SYS
中无法以这种方式访问对象(我不确定 Oracle 12.1)。
比较有趣的是tiggers、procedure、functions和packages。您不能使用 dbms_metadata
获取 SYS
拥有的包的 DDL,但也许您可以连接到一些示例模式,如 HR(人力资源)、AD(学术)、SH(销售历史)。
在 HR schema 中有一个存储过程 ADD_JOB_HISTORY
,里面有 insert statement
,所以它看起来像这样:
select dbms_metadata.get_ddl('PROCEDURE', 'ADD_JOB_HISTORY')
from dual;
CREATE OR REPLACE EDITIONABLE PROCEDURE "HR"."ADD_JOB_HISTORY"
( p_emp_id job_history.employee_id%type
, p_start_date job_history.start_date%type
, p_end_date job_history.end_date%type
, p_job_id job_history.job_id%type
, p_department_id job_history.department_id%type
)
IS
BEGIN
INSERT INTO job_history (employee_id, start_date, end_date,
job_id, department_id)
VALUES(p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id);
END add_job_history;
有更好的方法和更好的工具来实现您的目标 - 请参阅下文。
是否允许使用 SQL Developer 而不是 SQLPlus? SQL 开发人员有很好的功能,可以将 table 图标拖放到工作表中,然后系统会很好地提示您选择要查找的示例语句类型(SELECT、INSERT、更新等)- 选择一个后,您将获得示例语句。
不过最好的办法就是在浏览器中打开数据库SQL语言参考:
https://docs.oracle.com/database/121/SQLRF/toc.htm
我有一个使用 SQLPlus 的考试,有时我不记得 SQL 语句的确切语法,所以我想知道是否有任何方法可以从里面 SQLPlus.
例如,假设我忘记了如何使用 INSERT INTO,我需要这样的提醒:
INSERT INTO table-name (column-names)
VALUES (values)
这可能吗?
我尝试了 HELP 命令,但 none 似乎符合我的需要。 我用谷歌搜索没有成功。
没有。 SQL 是一种标准化语言(至少是 ANSI SQL)并且 SQLPlus "just" 使用该语法,因此内部帮助不涵盖它。内部帮助仅列出 SQL加上特定命令(例如 SET、CONNECT、SPOOL)。
可以通过某种方式解决该问题,但非常有限。您可以为某些现有对象调用 dbms_metadata.get_ddl
函数。其中一些 DDL 可能包含您感兴趣的语句。例如 - 您希望看到 select 语句 - 然后您可以为某些现有视图调用 dbms_metadata.get_ddl
:
select dbms_metadata.get_ddl('VIEW', 'USER_TABLES', 'SYS')
from dual;
请注意 - 它仅适用于 Oracle 11G 及更低版本,在最新的 SYS
中无法以这种方式访问对象(我不确定 Oracle 12.1)。
比较有趣的是tiggers、procedure、functions和packages。您不能使用 dbms_metadata
获取 SYS
拥有的包的 DDL,但也许您可以连接到一些示例模式,如 HR(人力资源)、AD(学术)、SH(销售历史)。
在 HR schema 中有一个存储过程 ADD_JOB_HISTORY
,里面有 insert statement
,所以它看起来像这样:
select dbms_metadata.get_ddl('PROCEDURE', 'ADD_JOB_HISTORY')
from dual;
CREATE OR REPLACE EDITIONABLE PROCEDURE "HR"."ADD_JOB_HISTORY"
( p_emp_id job_history.employee_id%type
, p_start_date job_history.start_date%type
, p_end_date job_history.end_date%type
, p_job_id job_history.job_id%type
, p_department_id job_history.department_id%type
)
IS
BEGIN
INSERT INTO job_history (employee_id, start_date, end_date,
job_id, department_id)
VALUES(p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id);
END add_job_history;
有更好的方法和更好的工具来实现您的目标 - 请参阅下文。
是否允许使用 SQL Developer 而不是 SQLPlus? SQL 开发人员有很好的功能,可以将 table 图标拖放到工作表中,然后系统会很好地提示您选择要查找的示例语句类型(SELECT、INSERT、更新等)- 选择一个后,您将获得示例语句。
不过最好的办法就是在浏览器中打开数据库SQL语言参考: https://docs.oracle.com/database/121/SQLRF/toc.htm