Executar o procedimento armazenado no programador SQL?

Estou a tentar executar um procedimento armazenado que tem vários paramaters dentro e fora. O procedimento só pode ser visto no meu painel de ligações navegando por outros utilizadores | / pacotes / /

Se eu carregar com o botão direito, os itens do menu são " Order Members By..."e" Create Unit Test " (greyed out). A capacidade de" executar " o procedimento não parece possível quando é acessado pelo Usuário.

Tenho estado a tentar encontrar um exemplo de como criar um bloco anónimo para poder executar o procedimento como ficheiro SQL, mas não encontrei nada que funcione.

Alguém sabe como posso executar este procedimento do desenvolvedor SQL? Estou a usar a versão 2.1.1.64.

Obrigado antecipadamente!

Editar 1:

o procedimento a que quero ligar tem esta assinatura:

user.package.procedure(
   p_1 IN  NUMBER,
   p_2 IN  NUMBER,
   p_3 OUT VARCHAR2,
   p_4 OUT VARCHAR2,
   p_5 OUT VARCHAR2,
   p_6 OUT NUMBER)
Se escrever o meu bloco anónimo assim:
DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, :out1, :out2, :out3, :out4);
END;

eu entendo o erro:

Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed

tentei inicializar as variáveis:

   out1 VARCHAR2(100) := '';

mas obter o mesmo erro:

Editar 2:

Com base na resposta da Alex, tentei remover os colões à frente dos params e ouvir isto:
Error starting at line 1 in command:
DECLARE
   out1 VARCHAR2(100);
   out2 VARCHAR2(100);
   out3 VARCHAR2(100);
   out4 NUMBER(100);
BEGIN
   EXECUTE user.package.procedure (33,89, out1, out2, out3, out4);
END;
Error report:
ORA-06550: line 13, column 17:
PLS-00103: Encountered the symbol "USER" when expecting one of the following:

   := . ( @ % ; immediate
The symbol ":=" was substituted for "USER" to continue.
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Author: sdoca, 2010-10-22

12 answers

Com tipos de parâmetros simples (isto é, não refcursores, etc. você pode fazer algo assim:

SET serveroutput on;
DECLARE
    InParam1 number;
    InParam2 number;
    OutParam1 varchar2(100);
    OutParam2 varchar2(100);
    OutParam3 varchar2(100);
    OutParam4 number;
BEGIN
    /* Assign values to IN parameters */
    InParam1 := 33;
    InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(InParam1, InParam2,
        OutParam1, OutParam2, OutParam3, OutParam4);

    /* Display OUT parameters */
    dbms_output.put_line('OutParam1: ' || OutParam1);
    dbms_output.put_line('OutParam2: ' || OutParam2);
    dbms_output.put_line('OutParam3: ' || OutParam3);
    dbms_output.put_line('OutParam4: ' || OutParam4);
END;
/


Edited to use the OP's spec, and with an alternative approach to utilise {[[2]} bind variables:
var InParam1 number;
var InParam2 number;
var OutParam1 varchar2(100);
var OutParam2 varchar2(100);
var OutParam3 varchar2(100);
var OutParam4 number;

BEGIN
    /* Assign values to IN parameters */
    :InParam1 := 33;
    :InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(:InParam1, :InParam2,
        :OutParam1, :OutParam2, :OutParam3, :OutParam4);
END;
/

-- Display OUT parameters
print :OutParam1;
print :OutParam2;
print :OutParam3;
print :OutParam4;
 67
Author: Alex Poole, 2010-10-21 22:33:56

Executar fácil. Obter os resultados pode ser difícil.

Dê uma olhada nesta pergunta que eu fiz a melhor maneira / ferramenta para obter os resultados de um procedimento de pacote oracle

O resumo é assim. Assumindo que tinhas um pacote chamado mypackage e procedimento chamado getQuestions. Ele retorna um refcursor e toma o nome de usuário string.

Tudo o que tem de fazer é criar um novo ficheiro SQL (Ficheiro Novo). Configure a ligação e cole no seguinte e executar.

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
 24
Author: Conrad Frix, 2017-05-23 11:47:19

Para aqueles que utilizam o desenvolvimento SQL 3+, no caso de não terem visto isso:

O desenvolvedor de SQL tem uma funcionalidade para executar directamente a proc / função armazenada, e a saída é mostrada de uma forma fácil de ler.

Basta clicar sobre o pacote armazenado/proc/ função armazenada, Clique em Run e escolha {a[1]} para ser o proc./func você deseja executar, SqlDeveloper irá gerar o fragmento de código a executar (de modo que você pode colocar seus parâmetros de entrada). Uma vez executados, os parâmetros de saída são mostrados em metade inferior da janela, e até tem suporte incorporado para o cursor de ref: o resultado do cursor será mostrado como uma página de saída separada.

 14
Author: Adrian Shum, 2015-06-03 06:37:36

Abra o procedimento no programador SQL e execute-o a partir daí. O programador SQL mostra o SQL que ele executa.

BEGIN
  PROCEEDURE_NAME_HERE();
END;
 10
Author: Noel, 2012-01-05 20:42:25

Utilizar:

BEGIN

  PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);

END;

Substituir "PACKAGE_NAME", "PROCEDURE_NAME" e "parameter_value" pelo que necessita. Os parâmetros de saída terão de ser declarados antes de.

 5
Author: OMG Ponies, 2010-10-21 20:49:07
Nenhuma destas respostas funcionou comigo. Aqui está o que eu tive que fazer para executar um procedimento no desenvolvedor SQL 3.2.20.10:
SET serveroutput on;
DECLARE
  testvar varchar(100);
BEGIN
  testvar := 'dude';
  schema.MY_PROC(testvar);
  dbms_output.enable;
  dbms_output.put_line(testvar);
END;

E então você teria que ir verificar a tabela para o que quer que seu proc era suposto fazer com aquela variável passada-in -- a saída irá apenas confirmar que a variável recebeu o valor (e teoricamente, passou-o para o proc).

Nota (diferenças entre as minhas e as outras):

  • não : antes da variável Nome
  • Não colocar .package. ou .packages. entre o nome do esquema e o nome do procedimento
  • não é preciso colocar um & no valor da variável.
  • não usar printem lado nenhum
  • não utilizar var para declarar a variável
Todos estes problemas deixaram-me a coçar a cabeça durante mais tempo e estas respostas que têm estes erros gritantes para serem extraídos, manchados e emplumados.
 1
Author: vapcguy, 2016-08-30 21:22:46

Não acredito, isto não vai ser executado no programador SQL:

var r refcursor;
exec PCK.SOME_SP(:r,
 '02619857');

print r;

Mas isto irá:

var r refcursor;
exec TAPI_OVLASCENJA.ARH_SELECT_NAKON_PRESTANKA_REG(:r, '02619857');

print r;
Obviamente, tudo tem de estar numa linha..
 0
Author: Amel Music, 2013-07-02 13:10:35

Usando a versão 4.0.2.15 do programador SQL Build 15.21 as seguintes obras:

SET SERVEROUTPUT ON
var InParam1 varchar2(100)
var InParam2 varchar2(100)
var InParam3 varchar2(100)
var OutParam1 varchar2(100)

BEGIN
    /* Assign values to IN parameters */
    :InParam1 := 'one';
    :InParam2 := 'two';
    :InParam3 := 'three';

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(:InParam1, :InParam2, :InParam3, :OutParam1);
    dbms_output.enable;
    dbms_output.put_line('OutParam1: ' || :OutParam1);
END;
/
 0
Author: Jack, 2014-07-25 20:05:47

Embora esta questão seja bastante antiga, continuo a tropeçar no mesmo resultado sem encontrar uma maneira fácil de correr do desenvolvedor sql. Depois de algumas tentativas, eu encontrei uma maneira fácil de executar o procedimento armazenado do desenvolvedor sql em si.

  • Em pacotes, selecione o pacote desejado e clique com o botão direito no nome do pacote (não no nome do procedimento armazenado).

  • Você vai encontrar uma opção para correr. Selecione isso e forneça os argumentos necessários. Clique em OK e você pode ver o resultado na secção das variáveis de saída abaixo

Estou a usar a versão de desenvolvimento SQL 4.1.3.20

 0
Author: Narasimha, 2018-03-13 18:46:51
Não consegui que as respostas do Alex Poole funcionassem. No entanto, por tentativa e erro, eu encontrei os seguintes trabalhos (usando o desenvolvedor SQL Versão 3.0.04). Postá-lo aqui no caso de ajudar outros:
SET serveroutput on;

DECLARE
    var InParam1 number;
    var InParam2 number;
    var OutParam1 varchar2(100);
    var OutParam2 varchar2(100);
    var OutParam3 varchar2(100);
    var OutParam4 number;

BEGIN
    /* Assign values to IN parameters */
    InParam1 := 33;
    InParam2 := 89;

    /* Call procedure within package, identifying schema if necessary */
    schema.package.procedure(InParam1, InParam2,
        OutParam1, OutParam2, OutParam3, OutParam4);

    /* Display OUT parameters */
    dbms_output.put_line('OutParam1: ' || OutParam1);
    dbms_output.put_line('OutParam2: ' || OutParam2);
    dbms_output.put_line('OutParam3: ' || OutParam3);
    dbms_output.put_line('OutParam4: ' || OutParam4);
END;
 -1
Author: ggkmath, 2013-09-21 19:01:43

Criar um bloco Pl / SQL pode ser doloroso se você tiver um monte de procedimentos que têm um monte de parâmetros. Existe uma aplicação escrita em python que o faz por si. Ele analisa o arquivo com declarações de procedimentos e cria o aplicativo web para invocações de procedimentos convenientes.

 -2
Author: nmax, 2015-12-11 15:25:34
var out_para_name refcursor; 
execute package_name.procedure_name(inpu_para_val1,input_para_val2,... ,:out_para_name);
print :out_para_name;
 -3
Author: Helper, 2012-09-05 19:29:46