Tengo un procedimiento almacenado que acepta múltiples parámetros (es decir Pname, pHeight, PTeam)parámetros de unión a Oracle SQL dinámico
tengo la consulta construida de esta manera:
SQLQuery VARCHAR2(6000);
TestCursor T_CURSOR;
SQLQuery := 'SELECT ID, Name, Height, Team FROM MyTable WHERE ID IS NOT NULL ';
-- Build the query based on the parameters passed.
IF pName IS NOT NULL
SQLQuery := SQLQuery || 'AND Name LIKE :pName ';
END IF;
IF pHeight IS > 0
SQLQuery := SQLQuery || 'AND Height = :pHeight ';
END IF;
IF pTeam IS NOT NULL
SQLQuery := SQLQuery || 'AND Team LIKE :pTeam ';
END IF;
OPEN TestCursor FOR SQLQuery USING pName, pHeight, pTeam;
Si ejecutar la procedimiento que pasa todos los parámetros, se ejecuta correctamente.
Pero si yo sólo pasaba una o dos de los parámetros, a continuación, los errores de procedimiento cabo:
ORA-01006: bind variable does not exist
¿Cómo se unen selectivamente la variable con los parámetros basados en donde se utilizó el valor del parámetro? Por ejemplo, aunque sólo fue aprobada pName, entonces yo solamente ejecutar la consulta:
OPEN TestCursor FOR SQLQuery USING pName;
O si tanto pName y PTeam fue aprobada, entonces:
OPEN TestCursor FOR SQLQuery USING pName, pTeam;
espero que alguien pueda arrojar más formas de resolver esta. Gracias.
Editar: que podría utilizar realmente el siguiente:
- Construir la consulta sobre la base de los parámetros pasados. SI pName NO ES NULO SQLQuery: = SQLQuery || 'Y NOMBRE COMO' '' || pName || '' ''; END IF;
IF pHeight IS > 0
SQLQuery := SQLQuery || 'AND Height = pHeight ';
END IF;
IF pTeam IS NOT NULL
SQLQuery := SQLQuery || 'AND Team LIKE ''' || pTeam || ''' ';
END IF;
OPEN TestCursor FOR SQLQuery;
Pero esto sería muy vulnerable a la inyección de SQL ...
¿Dónde se declaró t_binds? ¿O debo declararlo en alguna parte? – Batuta
Se declara en la cláusula 'WITH' en la declaración SQL, es una tabla ficticia para contener las variables de vinculación. Vea aquí: http://www.orafaq.com/node/1879 – Ollie
Probé esto pero todavía dice ORA-01008: no todas las variables están vinculadas – Batuta