-
Hola,
Necesito ayuda con una cosita que no condigo hacer.
He creado un procedimiento en SQL que me da unos resultados.
Osea, que si pongo SELECT * FROM procedimiento me devuelve un conjunto de filas.Vale, pues ahora necesito crear una vista que me de el mismo resultado. Osea que la vista llame al procedimiento pero no se como hacerlo.
En teoría es algo asi:
CREATE VIEW vista AS
SELECT * FROM procedimientoPero me da un error diciendo que no existe la tabla "procedimiento".
Como se hace esto??? A ver si me podeis decir algo que me urge un poco.
-
A ver, de mis apuntes de SQL tengo esto:
Vistas:
–------CREATE VIEW nombre_vista (columna1, columna2, … columnaN) AS SELECT columna1, columna2, … columnaN FROM tabla1, tabla2, … tablaN WHERE …..
Bien, cuando creas la tabla le dices el nombre que quieras i entre parentesis las columnas o variables que quieres que tenga. Luego cuando haces el "SELECT" ten en cuenta que solo puedes pillar "N" columnas o variables, si no no sabra donde poner las de más o las de menos.
Recuerda que las vistas se quedan en memoria hasta que no la borras:
DROP VIEW nombre_vista
Puedes meter mas cosas, como el "RESTRICT" o el "CASCADE" pero ya no me acuerdo muy bien…
Espero que te sirva.
Salu2!
-
Si, esa es una vista normal y las tengo más que controladas, pero el problema es que la SELECT que hay dentro de la vista es el resultado de un procedimiento.
Pongo el código:
SET TERM //;
CREATE PROCEDURE Apartado3cAux
RETURNS (tabla CHARACTER(31),indice CHARACTER(31),tipo CHARACTER(25),activo CHARACTER(10)) AS
DECLARE VARIABLE T CHARACTER(31);
DECLARE VARIABLE I CHARACTER(31);
DECLARE VARIABLE U SMALLINT;
DECLARE VARIABLE F CHARACTER(31);
DECLARE VARIABLE ID SMALLINT;
BEGIN
FOR SELECT RDB$RELATION_NAME,RDB$INDEX_NAME,RDB$UNIQUE_FLAG, RDB$FOREIGN_KEY,RDB$INDEX_ID FROM RDB$INDICES
WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%'
INTO :T,:I,:U,:F,:ID
DO
BEGIN
tabla = :T;
indice = :I;
IF (:ID IS NULL) THEN
activo='INACTIVO';
ELSE
activo='ACTIVO';
IF (:U = 1) THEN
IF (:ID=1) THEN
tipo='CLAVE PRIMARIA';
ELSE
tipo ='INDICE UNICO';
ELSE
IF (:F IS NOT NULL) THEN
tipo = 'CLAVE FORANEA';
ELSE
tipo = 'INDICE CON DUPLICADOS';
SUSPEND;
END
END//
SET TERM ;//Bien, pues necesito una vista que me devuelva lo que devuelve el procedimiento.
Si pongo SELECT * FROM Apartado3cAux me da el resultado que yo quiero, pero tengo que obtenerlo a traves de una vista. Que obtenga el mismo resultado con SELECT * FROM Apartado3c siendo Apartado3c una vista.
-
No se tio, ahi ya me quedo cojo, lo siento.
Por cierto, que lenguaje es ese?
-
Publicado originalmente por marcalj
**
Por cierto, que lenguaje es ese?**Es SQL. xD Solo que ya un poquito complejo.
-
Joder y yo ke me kedo en las consultas simples xD
A esa variante no la llaman PL/SQL ?
-
Publicado originalmente por daemonz
**Joder y yo ke me kedo en las consultas simples xDA esa variante no la llaman PL/SQL ?**
Pues no tengo ni idea. A mi me lo enseñaron como SQL, a secas. Pero podría ser….....
No hay ningún monstruo del SQL por aquí??????
-
Yo lo he dado este año, y tambien me he quedado con consultas simples, joins, subconsultas… de ahi no hemos pasado :$
-
Cojones que guapo…
Lo que el SQL no es un lenguaje, es un pseudo-lenguaje ya que no es ni lenguaje para script ni para compilacion, o algo raro me explicaron.
Pero bueno, se llamara algo parecido como comentaron mas arriba.
Por cierto, como lo usas? en un programa en C o como?
Salu2!
-
No, es un procedimiento que se crea en la propia base de datos. Igual que creas una vista o un trigger pues puedes crear un procedimiento que haga cosas. Son eso, programitas que ejecuta el gestor de base de datos.
-
Publicado originalmente por marcalj
Lo que el SQL no es un lenguaje, es un pseudo-lenguaje ya que no es ni lenguaje para script ni para compilacion, o algo raro me explicaron.Llevas razon, es un pseudolenguaje embedido en los propios gestores de la base de datos (SGBD), en mis apuntes le llama LMD (lenguaje de manipulacion de datos).
Comente lo del PL/SQL pq he oido hablar de el, y se ke es lo ke se utiliza para crear los triggers, algoritmos, etc.