Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/01/2010, 07:02
Sherezade81
 
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 16 años, 5 meses
Puntos: 0
Ejecutar fichero .sql

Muy buenas tardes a todos,
Por más que he repasado apuntes, y buscado información, no he conseguido ejecturar ficheros .sql desde Sql*Plus, algo que parece tan simple...
les comento por ejemplo un ejercicio.

Creo una función tal que:
CREATE OR REPLACE FUNCTION validar_deptno (n_deptno in dept.deptno%TYPE) RETURN BOOLEAN IS
n char;
BEGIN
SELECT 'N' INTO n FROM DEPT WHERE DEPTNO=n_deptno;
RETURN (TRUE);
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN (FALSE);
END validar_deptno;
/

La pruebo con el procedimiento:
CREATE OR REPLACE PROCEDURE nuevo_empleado (num emp.empno%TYPE, nombre emp.ename%TYPE,depart emp.deptno%TYPE) IS
total NUMBER(1);
num_error NUMBER:=0;
nom_error CHAR(100);
BEGIN
select count(*) into total from emp where empno=num;
If validar_deptno(depart) then
If total>0 then
DBMS_OUTPUT.PUT_LINE('No se ha podido insertar clave duplicada');
else
DBMS_OUTPUT.PUT_LINE('Se ha insertado una fila');
INSERT INTO EMP (EMPNO,ENAME,DEPTNO) VALUES (num,nombre,depart);
End if;
else
DBMS_OUTPUT.PUT_LINE('Departamento InvAlido');
END IF;
EXCEPTION
WHEN OTHERS THEN
num_error:=SQLCODE;
nom_error:=SUBSTR(SQLERRM,1,100);
DBMS_OUTPUT.PUT_LINE('ERROR: '||num_error||' - ' ||nom_error);
END nuevo_empleado;
/

Veo que funciona.Guardo la función en el bloc de notas con extensión .sql en C:\.
Voy a Sql*plus:

SQL> START C:\FVALIDAR_DEPT.SQL;
SP2-0734: inicio "´╗┐CREATE ..." de comando desconocido - resto de la lÝnea igno
rado.
SP2-0042: comando desconocido "n char" - resto de la lÝnea ignorado.
SELECT 'N' INTO n FROM DEPT WHERE DEPTNO=n_deptno;
*
ERROR en lÝnea 2:
ORA-06550: lÝnea 2, columna 42:
PL/SQL: ORA-00904: "N_DEPTNO": identificador no vßlido
ORA-06550: lÝnea 2, columna 1:
PL/SQL: SQL Statement ignored
ORA-06550: lÝnea 3, columna 1:
PLS-00372: En un procedimiento, la sentencia RETURN no puede contener ninguna
expresi¾n
ORA-06550: lÝnea 3, columna 1:
PL/SQL: Statement ignored
ORA-06550: lÝnea 5, columna 25:
PLS-00372: En un procedimiento, la sentencia RETURN no puede contener ninguna
expresi¾n
ORA-06550: lÝnea 5, columna 25:
PL/SQL: Statement ignored

Y el caso, es que he probado con múltiples ejercicios, pero siempre lo mismo, ya en la primera sentencia eme da errores....
¿Saben que puedo estar haciendo mal?
Muchas gracias una vez mas por vuestra atención. La verdad es que como ven Oracle me supera... pero vamos, por ganasde superarle yo a ella no será...
Un saludo