2017-02-16 79 views
0

В моей компании только администраторы баз данных имеют разрешения на создание представлений, хранимых процедур, функций и т. Д. В настоящее время, когда я хочу запускать сложные функции или запросы, я должен писать все в рамках одного скрипта. Это делает мои скрипты большими и повторяющимися, так как многие мои скрипты выполняют аналогичные функции.Любой способ запуска PLSQL-процедур локально через TOAD?

Есть ли способ сохранить и запустить процедуру, функцию или просмотреть локально или в личном местоположении, а не хранить ее в базе данных 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 

Любая помощь или советы будут оценены.

+1

Это действительно то, что он говорит. У вас недостаточно прав для создания процедуры. – GurV

+0

Я понимаю, что ... Я спрашиваю, есть ли другой способ выполнить ту же функциональность. –

+1

Ну, нет. Способ хранения кода процедуры db - использовать функцию хранимых процедур. Если ваши администраторы баз данных не позволят вам это сделать, они наносят ущерб вашей способности делать значимую разработку программного обеспечения в базе данных. –

ответ

0

Вы создали директорию с несколькими файлами - по одному на анонимный блок кода. это будет эффективно вашими «процедурами». Сценарий SQLPlus может вызывать каждую «процедуру» с использованием функции @ the_procedure.sql по мере необходимости при передаче любых параметров.

Если вы укажете расположение каталога в сети, то любой, у кого есть SQLPlus, сможет выполнять любые ваши «процедуры» таким же образом.

Насколько это выполнимо для вас, во многом будет зависеть от того, какое взаимодействие между различными процедурами вы ожидаете.

+0

Можете ли вы привести мне пример того, как это будет работать, или предоставить ссылку на руководство? Я не уверен, какую функциональность вы имеете в виду. –

+0

«@» просто запускает SQL-скрипт. Файл сценария будет содержать анонимный блок. Там, где это может осложниться, происходит переход от одной «процедуры» к следующей или вызова «процедуры» изнутри другой. – BriteSponge

+0

На самом деле, это работает! Спасибо за совет! –

0

Сохраните свой код как анонимный блок в Toad как Именованный SQL.

  • Для того, чтобы сохранить его Редактора | Добавить в Именованные SQLs.
  • Для получения формы CTRL + N или Просмотр | SQL Command Recall | Именовано.

P.S. Код будет доступен только на вашем ПК с установленной жабой.

+0

Это может быть именно то, что я ищу. Проведите некоторое расследование сейчас. –

+0

Ах, черт возьми, это не совсем то, что мне нужно. Я хочу иметь возможность вызывать функцию напрямую, не вставляя код функции в мой скрипт. Спасибо хоть! –

+0

Нет, вы не сможете сделать это напрямую. Но это поможет вам упростить управление вашими сценариями. – Jgrammer

0

Вы можете определить (временную) процедуру (или функцию) внутри/SQL блока анонимного PL:

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; 
/

Но есть ограничение, что процедура видна только в , что блока, а не снаружи из этого.

0

Ну, вы можете объявить процедуру в 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. 
+0

Это почти то, что я делаю сегодня - пока он работает, он повторяется, когда я выполняю подобные функции. –