【问题标题】:How to create oracle procedures but not store如何创建oracle程序但不存储
【发布时间】:2012-02-01 10:34:19
【问题描述】:

我想使用我编写的一些智能程序,但不存储它们。例如,这是一个很大的选择,它检索表的主键:

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = 'TABLE_NAME'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;

我不想记住这一点,甚至在每次需要表的约束时都不要输入它。但我不想为此在数据库中创建一个程序,因为它是一个产品数据库,没有其他人需要我的程序。只有我。只是为了开发。

这就是我现在的位置:

SQL> declare procedure hello as begin dbms_output.put_line('Hello world!'); end; begin hello; end;
  2  /
Hello world!

PL/SQL procedure successfully completed.

SQL> hello;
SP2-0042: unknown command "hello" - rest of line ignored.

... 所以我可以从命令行声明和定义 hello 函数。我可以在声明之后从 begin - end 块调用它,但之后 hello 过程就消失了。

问题:有没有办法让第二个“你好;”工作,所以我可以创建聪明而有用的程序,而不是在数据库本身中制造任何垃圾?

如果这可行,我会用它创建一个文件,并为 sqlplus 设置别名以在启动时执行该文件。

【问题讨论】:

  • 您可以创建另一个模式并将您的程序放在那里。不会污染生产用户....
  • 你正在 prod DB 上开发 :)
  • 好吧,它不是 prod,但很多其他开发者都在使用它,并且不希望污染它。
  • 只需创建一个包来存储您的程序。尝试使它们尽可能有用和通用。一个实用程序包不会“污染”数据库。

标签: sql oracle procedure


【解决方案1】:

您可以将每个查询(它们真的是 procs 吗?)放在 SQLPATH 目录中自己的文件中,但带有位置参数;例如一个名为pkeys.sql的文件:

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = '&1'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;

你可以做的来自 SQL*Plus:

@pkeys TABLE_NAME

如果它是一个过程,您仍然可以拥有您的declare procedure ... begin ... end 表单,并让调用将&1 传递给该过程。实际上,这几乎就是 StevieG 的目的,但使用位置参数可以消除每次编辑文件的需要。

【讨论】:

  • 这就是我想要的! danke :)
【解决方案2】:

您可以将过程放在脚本文件中,然后使用@ 运算符从命令行运行它。例如

--c:\temp\helloworld.sql

begin
  dbms_output.put_line('Hello World');
end;
/

然后登录数据库并运行:

SQL> set serveroutput on
SQL> @c:\temp\helloworld

你应该得到:

Hello World

PL/SQL procedure successfully completed.

【讨论】:

  • 我想过这个,但我仍然不能从命令行使用hello 过程,必须在文本编辑器中编辑helloworld.sql,然后@c:\temp\helloworld ...
猜你喜欢
  • 1970-01-01
  • 2017-02-22
  • 2017-12-21
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多