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


0