我想使用我写的一些智能程序,但不能存储它们 . 例如,这是一个非常大的选择,它检索表的主键:
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;
我不想记住这个,甚至不是每次我需要表的约束时都输入它 . 但我不想为此创建一个程序进入数据库,因为它是一个prod数据库,没有其他人需要我的程序 . 只有我 . 只是为了发展 .
所以这就是我现在的位置:
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函数 . 我可以在声明之后从开始 - 结束块调用它,但之后hello过程就消失了 .
问题:是否有解决方案使第二个“你好”;工作,所以我可以创建聪明有用的程序,而不是在数据库本身做任何垃圾?
如果这样可行,我会用它创建一个文件,并使sqlplus的别名在启动时执行该文件 .
2 回答
您可以将每个查询(它们真的是procs?)放在SQLPATH目录中的自己的文件中,但是使用位置参数;例如一个名为
pkeys.sql
的文件:您可以从SQL * Plus中执行以下操作:
如果是程序,您仍然可以使用
declare procedure ... begin ... end
表格,并将呼叫传递给程序&1
. 实际上,这几乎就是StevieG所获得的,但是使用位置参数来消除每次编辑文件的需要 .您可以将该过程放在脚本文件中,然后使用@运算符从命令行运行它 . 例如
然后登录数据库并运行:
你应该得到: