salida procedimientos procedimiento parametros funciones entrada ejemplos ejecutar developer con como almacenado oracle stored-procedures oracle11g sqlplus

procedimientos - El procedimiento de Oracle solo funciona cuando se establece la salida del servidor;



procedimientos y funciones oracle pl/sql (1)

El error proviene de la creación de instancias del paquete :

Cuando una sesión hace referencia a un elemento del paquete, Oracle Database crea una instancia del paquete para esa sesión. Cada sesión que hace referencia a un paquete tiene su propia instanciación de ese paquete.

Cuando Oracle Database crea una instancia de un paquete, lo inicializa. La inicialización incluye cualquiera de los siguientes casos: ...

  • Ejecutando la parte de inicialización del cuerpo del paquete

Esa instalación solo ocurre una vez por sesión. Su primera llamada al procedimiento ejecuta la sección de inicialización. La segunda llamada no. El set serveroutput on no está teniendo ningún efecto, es solo que es la segunda llamada que funciona, y eso es porque esa inicialización no se llama la segunda vez.

Por lo tanto, el error proviene de la parte de inicialización del cuerpo del paquete, que está justo al final: después de todos los procedimientos y funciones, etc., debe begin antes del final del paquete. Algo como:

create or replace package body abc_utils as ... some_var number; -- package state variable ... procedure abc_init is ... begin ... end abc_init; ... /* package initialisation */ begin select some_col into some_var from some_table; -- line 1743 end abc_utils; /

El código en ese bloque incluirá la línea 1743, y esa será una select ... into cual se encuentra más de una fila. No has mostrado ese código, pero es eso lo que debes investigar.

Extraño comportamiento al intentar insertar un registro con un procedimiento almacenado. Solo funciona con set serveroutput on :

Gracias.

SQL*Plus: Release 11.2.0.1.0 Production on Tue May 31 22:48:25 2016 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> exec abc_utils.abc_init(p_table_name => ''ABC_TEST'', p_batch_alias => ''TST''); BEGIN abc_utils.abc_init(p_table_name => ''ABC_TEST'', p_batch_alias => ''TST''); END; * ERROR at line 1: ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at "TESTUSR.abc_utils", line 1743 ORA-06512: at line 1 SQL> set serveroutput on; SQL> exec abc_utils.abc_init(p_table_name => ''ABC_TEST'', p_batch_alias => ''TST''); PL/SQL procedure successfully completed. PROCEDURE abc_init(p_table_name IN VARCHAR2, p_batch_alias IN VARCHAR2) IS v_sql VARCHAR2(32000); --object caller variables v_owner VARCHAR2(30 CHAR); v_obj_name VARCHAR2(30 CHAR); v_line_no NUMBER; v_caller_type VARCHAR2(30 CHAR); v_caller VARCHAR2(4000 CHAR); BEGIN owa_util.who_called_me(v_owner, v_obj_name, v_line_no, v_caller_type); v_caller := ''Object Name: '' || $$plsql_unit || ''; Caller Name: '' || v_obj_name || ''; Caller Line: '' || to_char(v_line_no); --initialise summary table v_sql := ''INSERT INTO INIT_SUMMARY (BATCH_ALIAS,TABLE_NAME,START_DT,BATCH_USER,BATCH_RUN) '' || ''SELECT a.BATCH_NAME,:1,:2,a.BATCH_USER,:3 FROM INIT_CFG a WHERE 1 = 1 AND BATCH_NAME = :4''; EXECUTE IMMEDIATE v_sql USING p_table_name,SYSDATE,summary_seq.nextval,p_batch_alias; COMMIT; EXCEPTION WHEN OTHERS THEN gv_err_msg := substr(''Back Trace: '' ,1,4000); RAISE_APPLICATION_ERROR(-20001,''abc_init: '' || gv_err_msg); END abc_init; --********************************************************************