Duda procedimientos pl/sql

JuAn4k4

Seguramente sera una chorrada pero esque no lo consigo.

Tengo en un fichero un par de procedimientos pl/sql ( estamos empezando con ello ) , y querria saber como coj** meterlo en la base de datos.

Los procedimientos son muy tontos, son consultas que se pueden hacer en 3 lineas de un select, pero claro nos mandan hacer el procedimiento pues imagino que por aprender.

Despues querre llamarlos desde una clase java que tengo hecha que ya me inicializa todo y hace esa misma consulta pero sin ser proc pl/sql.

La duda es como meter el proc en la bd ( Oracle ) , lo intente desde sql plus pero no traga.

Gracias un saludo !

Dod-Evers

Juanaka, esto es lo que me ha dicho un colega:



¿? amos a ver

Para poder ejecutar un procedimiento desde la base de datos, tiene que ser un procedimiento almacenado,no vale con que sea un procedure normal.

Para almacenar un procedimiento en la base de datos, hay que lanzar algo así, (puede hacerlo en sqlplus, pero se querrá cortar las venas).

CREATE OR REPLACE PROCEDURE FOO ( PARAMETROS) IS

-- DECLARACION VARIABLES

BEGIN

-- CUERPO DEL PROCEDURE

END;

Una vez que eso lo ha hecho bien y no le da errores de compilación, puede llamar al procedimiento.

OJO!

GRANT EXECUTE ON FOO TO ??? (puede sustituir ??? por public para que to dios pueda ejecutar)

y para ejecutar tendrá que prefijar el procedimiento con el nombre del esquema, si no quiere, puede crear un public synonym del procedure y a correr.

Al loro, para crear el procedure y compilarlo es necesario tener una serie de privilegios no triviales, me imagino que si están en un entorno de pruebas academico lo tendrán todo a full de privs, con lo que no debería tener problema...

Me imagino que su problema era que no controla la diferencia entre procedimientos y procedimientos almacenados....

SALUD!

JuAn4k4

No no , si diferenciarlos si los diferencio, la cosa es que yo tengo el codigo de un procedimiento, y lo que quiero es almacenarlo para que asi sea un procedimiento almacenado.

Es decir, yo tengo la parte de:

CREATE OR REPLACE PROCEDURE FOO ( PARAMETROS) IS
-- DECLARACION VARIABLES
BEGIN
-- CUERPO DEL PROCEDURE
END;

Y quiero meterlo en la bd, pero no se.

En el manual solo he visto como se hacen etc pero no como se meten.

PD: El proc. en cuestion es ( Aunque no viene al caso ):

 create or replace procedure CONSULTAA (   
fechaInicio IN DATE
fechaFinal IN DATE minAlertas IN integer)
AS
CURSOR laAlerta is
select count(idEstBizi), idEstBizi from Alertas where ((fecha >= fechaInicio) and (fechaFinal >= fecha)) group by (idEstBizi);
numeroAlertas integer;
identificador ALERTAS.idEstBizi%type;
begin
OPEN laAlerta;
LOOP FETCH laAlerta into numeroAlertas,identificador;
EXIT WHEN laAlerta%NOTFOUND;
if numeroAlertas > minAlertas then
dbms_output.put_line('Estación' || identificador || 'con' || numeroAlertas || 'alertas');
end if;
END LOOP; CLOSE laAlerta; commit; END;
Dod-Evers

A ver si lo saco, que estoy preguntando a 2 colegas que pilotan de esto.

Mira a ver si puedes conectar a los servidores de la uni con el "TOAD".

Y puede que esto te ayude: http://www.jlcomp.demon.co.uk/faq/utl_file.html

También me han dicho de mirar esto: http://www.orafaq.com/wiki/SQL*Loader_FAQ

Pero al final será tan simple como meter el proc en una carpeta y darle al exec, o load o lo que sea...

A ver si te sirve de algo.

PD: Ya te debe quedar nada para acabar no? Suerte con Mena y dbdr.

JuAn4k4

Gracias Dod-Evers , si ya me queda poco para acabar, y gracias !! Voy a mirar

El toad ese no se usarlo, pone Connect Using... y me dice que no tengo nada para Oracle.

Lo del SQL*Loader solo me dice como meter/sacar datos desde ficheros, pero datos de tablas.

Y el otro no se de que me habla.

Estoy por mandarle un email al Mena para que me diga... pero tengo miedo es un hombre muy extraño.

Soltrac

Cuando ejecutas un CREATE PROCEDURE, se instala en la base de datos siempre q tu usuario tenga permisos para ello.

JuAn4k4

#6 en Sqlplus ? O donde ejecuto el Create procedure ? Esa es mi duda, porque mi sqlplus se queda atascado , es como si no escribiera el ultimo ";"

ejemplos :

SQL> create procedure
2 ;
3 ;

SQL>create procedure foo as begin end;
2 ;
3 ;
4 ;

EDITADO: Joder me he fijado que al final de los ejemplos hay una "/" como para acabar, lo meto asi en sqlplus y tachan ! funciona, ha que joderse.

Dod-Evers

Yo acabaría mandándole un mail o pasar por su despacho, aunque te puede tener unas horas encerrado... xD

Soltrac

#7 O si no, haces el procedimiento fuera en un .sql y lo importas.

JuAn4k4

#9 Eso es lo que no se hacer, como importarlo. xD

Actualmente lo tengo metido de carambola, me da error en la clase java al meterlo pero misteriosamente el procedimiento se ha almacenado.

Lo ejecuto y no me pinta por pantalla pero eso ya supongo q sera otra historia.

EDIT : Bueno mas o menos esta SOLUCIONADO el meterlo a la BD, ( Copio todo y le doy a pegar en el SQLPLUS y chuta. )

Ahora mi problema es, que no pinta nada por pantalla, quiero pintar los resulados que voy obteniendo pero no hay manera, he leido que lo mas parecido para pintar es:

dbms_output.disable;
DBMS_OUTPUT.PUT_LINE(numeroAlertas);
DBMS_OUTPUT.PUT_LINE(identificador);
dbms_output.enable;

Pero no hace nada :S Help me !

EDIT2 : Solucionado también
set serveroutput on <- Habia que poner la salida a On, HAY QUE JODERSE ! xD

¿ Porque no ponen estas cosas en los tutoriales para los no iniciados ?

LOc0

¿Has probado a meterlo en un fichero .SQL y en SQL PLUS cargarlo con?:

SQL>@c:\procedimiento.sql

Yo me bajé el Oracle 10g Express (gratuito) que se controla por interfaz web y es una gozada comparado con el SQL PLUS...

Salu2 ;)

JuAn4k4

Buah esque la historia de tenerlo en un fichero me da mucha pereza, ya que para eso tengo que poner el fichero en el servidor de la universidad... y pfff..

Voy a probar eso del Oracle 10g Express.

PD: Otro dia que hay que registrarse buah que pereza despues de lo que llevo aqui para arreglar estos 2 errores de m**..

Soltrac

El SQLPLUS es la muerte.

Hoy en día, me parece un atraso trabajar sin interfaz gráfica, pero entiendo q las universidades obliguen a usarlo porque al final te encuentras al típico q no tiene ni idea de lo q significa CREATE TABLE, ellos pinchan en el menú boton derecho click en "crear tabla"...etc.

Dod-Evers

#13 ya lu sabemos, que tb lo he sufrido y así es. Mira mi hermano ahora ha hecho una asignatura de "Informática para economistas" y les han dado SQL y todo... pero nada de bases de datos, ni relacion ni nada de nada, el va y coge con el ratoncico y le aparece el where, el order by... xD

JuAn4k4

Lo que ya es la muerte es .. meter datos..

spoiler

Usuarios habituales

  • JuAn4k4
  • Dod-Evers
  • Soltrac
  • LOc0