有没有办法通过TOAD在本地运行PLSQL程序?

时间:2017-02-16 14:29:37

标签: sql oracle stored-procedures plsql toad

在我的公司,只有DBA才有权创建视图,存储过程,函数等。目前,每当我想运行复杂的函数或查询时,我都必须在一个脚本中编写所有内容。这使得我的脚本变得庞大且重复,因为我的许多脚本都执行类似的功能。

有没有办法在本地或个人位置保存和运行过程,功能或视图,而不是将其存储在Oracle数据库中?这个脚本

create or replace procedure <userSchema>.MyTest AS
BEGIN
    dbms_output.put_line('This is a test');
End;

给出错误

[Error] Compilation (1: 1): ORA-01031: insufficient privileges

任何帮助或提示都将不胜感激。

4 个答案:

答案 0 :(得分:1)

好吧,您可以在匿名PL / SQL块中声明该过程:

SQL> DECLARE
  2       PROCEDURE MyTest AS
  3       BEGIN
  4            dbms_output.put_line('This is a test');
  5       END;
  6  BEGIN
  7       MyTest();
  8  END;
  9  /
This is a test

PL/SQL procedure successfully completed.

答案 1 :(得分:0)

将您的代码作为匿名块存储在Toad中作为命名SQL。

  • 保存编辑器|添加到命名SQL
  • 要获得 CTRL + N 查看| SQL命令召回|命名即可。

P.S。只有安装了Toad的PC才能访问代码。

答案 2 :(得分:0)

您可以在匿名PL / SQL块中定义(临时)过程(或函数):

declare
  var1 integer;
  var2 varchar(100);

  procedure print(p_what varchar)
  as
  begin
     dbms_output.put_line(p_what);
  end;

begin
  print('Doing stuff');
  insert into some_value (id) values (42);
  delete from other_table;
  print('Deleted '||SQL%ROWCOUNT||' rows');

  update foobar 
     set answer = 42;
  print('Updated '||SQL%ROWCOUNT||' rows');
end;
/

但是这有一个限制,即程序只能在那个块中看到,而不是在它之外。

答案 3 :(得分:0)

您设置了一个包含多个文件的目录 - 每个匿名代码块一个。这些将有效地成为您的“程序”。 SQLPlus脚本可以根据需要使用@the_procedure.sql功能调用每个'过程',同时传递所需的任何参数。

如果您在网络上共享目录位置,那么拥有SQLPlus的任何人都可以以相同的方式运行您的任何“程序”。

这对你来说是否可行在很大程度上取决于你期望的各种程序之间的相互作用。