DB2 - Como crear y ejecutar Procedimientos almacenados

 
Vista:

Como crear y ejecutar Procedimientos almacenados

Publicado por nico (2 intervenciones) el 27/03/2009 16:16:36
Necesitaría saber en db2 v9 (winxp) como crear y ejecutar un simple store procedure ya que intente ejecutar sentencias desde el editor de mandatos que encontré en la web pero ninguna me funciona y nunca pude crear el store procedure (seguramente tenga algún error de concepto ya que desconozco como funciona un procedimiento almacenado).

Saludos y muchas gracias.

PD: mustro algunos ejemplos que intente ejcutar

por ejemplo cree la sig tabla con los sig valores:

CREATE TABLE tabla1
(ID INTEGER NOT NULL,
DESC CHAR(20) NOT NULL
);

INSERT INTO tabla1 VALUES
(1 , 'registro 1'),
(2 , 'registro 2'),
(3 , 'registro 3');

y cuando intento crear el proc. almacenado (no se si se crea desde el editor de mandatos con las sig sentencias) obtengo error como resultado.

prueba 1

CREATE PROCEDURE SpTabla1 (IN pnId int OUT pnCont int)
LANGUAGE SQL
BEGIN
SELECT Count(*)
INTO pnCont
FROM Tabla1
WHERE Id = 1pnId
END@



prueba 2

CREATE PROCEDURE SpTabla1 (IN pnId int OUT pnCont int)
LANGUAGE SQL
BEGIN
SELECT *
FROM Tabla1
WHERE Id = 1
END@

prueba 3

CREATE PROCEDURE SpTabla1 (IN pnId integer)
LANGUAGE SQL
BEGIN
SELECT Count(*) FROM Tabla1
end;

CREATE PROCEDURE SpTabla1 (IN pnId integer)
LANGUAGE SQL
BEGIN
SELECT Count(*) FROM Tabla1
end
DB21034E El mandato se ha procesado como una sentencia de SQL porque no era
un mandato válido para el procesador de línea de mandatos. Durante el proceso
SQL se ha devuelto:
SQL0104N Se ha encontrado una señal imprevista "FROM" a continuación de "
SELECT Count(*)". Entre las señales esperadas se puede incluir: "END". LINE
NUMBER=4. SQLSTATE=42601

SQL0104N Se ha encontrado una señal imprevista "FROM" a continuación de "
SELECT Count(*)". Entre las señales esperadas se puede incluir: "END ".

Explicación:

Se ha detectado un error de sintaxis en la sentencia de SQL o en
la serie del mandato de entrada para el procedimiento
SYSPROC.ADMIN_CMD en el símbolo especificado después del texto
"<texto>". El campo "<texto>" indica los 20 caracteres de la
sentencia de SQL o de la serie del mandato de entrada para el
procedimiento SYSPROC.ADMIN_CMD que preceden al símbolo que no es
válido.

Como ayuda, se proporciona una lista parcial de símbolos
válidos en el campo SQLERRM del SQLCA como
"<lista-símbolos>". Esta lista da por supuesto que la sentencia
es correcta hasta ese punto.

No se puede procesar la sentencia.

Respuesta del usuario:

Revise y corrija la sentencia en el área del símbolo
especificado.

sqlcode : -104

sqlstate : 42601


prueba 4: encontre el sig store para tablas de la de bdd sample y tambien obteno error

CREATE PROCEDURE sqlsamp ( IN dpt varchar(4) )
SPECIFIC sqlsamp
RESULT SETS 1
LANGUAGE SQL
------------------------------------------------------------------------
-- Procedimiento almacenado de SQL sqlsamp
------------------------------------------------------------------------
P1: BEGIN
-- Declarar cursor

SELECT
DEPARTMENT.DEPTNO,
DEPARTMENT.DEPTNAME,
EMPLOYEE.FIRSTNME,
EMPLOYEE.MIDINIT,
EMPLOYEE.LASTNAME
FROM
DEPARTMENT,
EMPLOYEE
WHERE
(
(
EMPLOYEE.EMPNO = DEPARTMENT.MGRNO
)
AND
( (
DEPARTMENT.DEPTNO = dpt
) )
);

END P1

el error obtenido en prueba 4 es :
DB21034E El mandato se ha procesado como una sentencia de SQL porque no era
un mandato válido para el procesador de línea de mandatos. Durante el proceso
SQL se ha devuelto:
SQL0104N Se ha encontrado una señal imprevista "DEPARTMENT" a continuación de
"STNAME FROM ". Entre las señales esperadas se puede incluir:
"<space>". LINE NUMBER=18. SQLSTATE=42601

END P1
DB21034E El mandato se ha procesado como una sentencia de SQL porque no era
un mandato válido para el procesador de línea de mandatos. Durante el proceso
SQL se ha devuelto:
SQL0104N Se ha encontrado una señal imprevista "END-OF-STATEMENT" a
continuación de "END P1". Entre las señales esperadas se puede incluir: "JOIN
<joined_table>". SQLSTATE=42601

SQL0104N Se ha encontrado una señal imprevista "END-OF-STATEMENT" a continuación de "END P1". Entre las señales esperadas se puede incluir: "JOIN <joined_table> ".

Explicación:

Se ha detectado un error de sintaxis en la sentencia de SQL o en
la serie del mandato de entrada para el procedimiento
SYSPROC.ADMIN_CMD en el símbolo especificado después del texto
"<texto>". El campo "<texto>" indica los 20 caracteres de la
sentencia de SQL o de la serie del mandato de entrada para el
procedimiento SYSPROC.ADMIN_CMD que preceden al símbolo que no es
válido.

Como ayuda, se proporciona una lista parcial de símbolos
válidos en el campo SQLERRM del SQLCA como
"<lista-símbolos>". Esta lista da por supuesto que la sentencia
es correcta hasta ese punto.

No se puede procesar la sentencia.

Respuesta del usuario:

Revise y corrija la sentencia en el área del símbolo
especificado.

sqlcode : -104

sqlstate : 42601
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como crear y ejecutar Procedimientos almacenado

Publicado por Moulin (1 intervención) el 29/04/2009 20:34:43
Fijate si estás escribiendo correctamente el nombre de las tablas.
Si las tenés bajo un esquema determinado, tenés que poner :
ESQUEMA.NOMBRE_TABLA

Espero haber sido de ayuda! Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sigo sin poder crear un simple PROCEDIMIENTO ALMAC

Publicado por Nico (2 intervenciones) el 11/05/2009 15:07:49
Hola, sigo sin poder crear un simple sp, Realize la prueba agregando el esquema y siempre obtengo el mismo error.

Gracias por la rta
Slds.

el error que obtengo es el sig.

------------------------------ Mandatos entrados ------------------------------
CREATE PROCEDURE SpTabla1 (IN lpnId int,OUT pnCont int)
LANGUAGE SQL
BEGIN
SELECT Count(*)
INTO pnCont
FROM Tabla1
WHERE Id = 1
END@;
------------------------------------------------------------------------------
CREATE PROCEDURE SpTabla1 (IN lpnId int,OUT pnCont int)
LANGUAGE SQL
BEGIN
SELECT Count(*)
INTO pnCont
FROM Tabla1
WHERE Id = 1
END@
DB21034E El mandato se ha procesado como una sentencia de SQL porque no era
un mandato válido para el procesador de línea de mandatos. Durante el proceso
SQL se ha devuelto:
SQL0104N Se ha encontrado una señal imprevista "END@" a continuación de
"Tabla1 WHERE Id = 1 ". Entre las señales esperadas se puede incluir:
"<psm_semicolon>". LINE NUMBER=7. SQLSTATE=42601

SQL0104N Se ha encontrado una señal imprevista "END@" a continuación de "Tabla1
WHERE Id = 1
". Entre las señales esperadas se puede incluir: "<psm_semicolon> ".

Explicación:

Se ha detectado un error de sintaxis en la sentencia de SQL o en
la serie del mandato de entrada para el procedimiento
SYSPROC.ADMIN_CMD en el símbolo especificado después del texto
"<texto>". El campo "<texto>" indica los 20 caracteres de la
sentencia de SQL o de la serie del mandato de entrada para el
procedimiento SYSPROC.ADMIN_CMD que preceden al símbolo que no es
válido.

Como ayuda, se proporciona una lista parcial de símbolos
válidos en el campo SQLERRM del SQLCA como
"<lista-símbolos>". Esta lista da por supuesto que la sentencia
es correcta hasta ese punto.

No se puede procesar la sentencia.

Respuesta del usuario:

Revise y corrija la sentencia en el área del símbolo
especificado.

sqlcode : -104

sqlstate : 42601
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sigo sin poder crear un simple PROCEDIMIENTO ALMAC

Publicado por RICARDO (1 intervención) el 27/05/2014 06:06:33
TE FALTA EL PUNTO Y COMA AL FINAL DE LA SENTENCIA SQL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como crear y ejecutar Procedimientos almacenados

Publicado por matias (1 intervención) el 14/07/2011 15:47:41
ponele un ; al final de cada sentencia SQL dentro del procedure. y tambien el END en la misma linea

CREATE PROCEDURE SpTabla1 (IN pnId int OUT pnCont int)
LANGUAGE SQL
BEGIN
SELECT Count(*)
INTO pnCont
FROM Tabla1
WHERE Id = 1pnId;END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar