Parámetros de procedimiento
Los parámetros de las llamadas a procedimiento pueden ser parámetros de entrada, entrada/salida o salida. Esto es diferente de los parámetros de todas las demás instrucciones SQL, que siempre son parámetros de entrada.
Los parámetros de entrada se usan para enviar valores al procedimiento. Por ejemplo, supongamos que la tabla Parts tiene las columnas PartID, Description y Price. El procedimiento InsertPart puede tener un parámetro de entrada para cada columna de la tabla. Por ejemplo:
{call InsertPart(?, ?, ?)}
Un controlador no debe modificar el contenido de un búfer de entrada hasta que SQLExecDirect o SQLExecute devuelva SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA. El contenido del búfer de entrada no debe modificarse mientras SQLExecDirect o SQLExecute devuelva SQL_NEED_DATA o SQL_STILL_EXECUTING.
Los parámetros de entrada/salida se usan para enviar valores a procedimientos y recuperar valores de procedimientos. El uso del mismo parámetro como parámetro de entrada y salida tiende a ser confuso y debe evitarse. Por ejemplo, supongamos que un procedimiento acepta un id. de pedido y devuelve el id. del cliente. Esto se puede definir con un único parámetro de entrada/salida:
{call GetCustID(?)}
Puede ser mejor usar dos parámetros: un parámetro de entrada para el id. de pedido y un parámetro de salida o entrada/salida para el id. de cliente:
{call GetCustID(?, ?)}
Los parámetros de salida se usan para recuperar el valor devuelto del procedimiento y para recuperar valores de argumentos de procedimiento; los procedimientos que devuelven valores a veces se conocen como funciones. Por ejemplo, supongamos que el procedimiento GetCustID que se acaba de mencionar devuelve un valor que indica si pudo encontrar el pedido. En la siguiente llamada, el primer parámetro es un parámetro de salida que se usa para recuperar el valor devuelto del procedimiento, el segundo parámetro es un parámetro de entrada que se usa para especificar el id. de pedido y el tercer parámetro es un parámetro de salida que se usa para recuperar el id. de cliente:
{? = call GetCustID(?, ?)}
Los controladores gestionan los valores de los parámetros de entrada y entrada/salida en los procedimientos de forma similar a los parámetros de entrada en otras instrucciones SQL. Cuando se ejecuta la instrucción, recuperan los valores de las variables enlazadas a estos parámetros y los envían al origen de datos.
Una vez ejecutada la instrucción, los controladores almacenan los valores devueltos de los parámetros de entrada/salida y salida en las variables enlazadas a esos parámetros. No se garantiza que estos valores devueltos se establezcan hasta después de que se hayan recuperado todos los resultados devueltos por el procedimiento y SQLMoreResults haya devuelto SQL_NO_DATA. Si la ejecución de la instrucción produce un error, el contenido del búfer de parámetros de entrada/salida o del búfer de parámetros de salida no está definido.
Una aplicación llama a SQLProcedure para determinar si un procedimiento tiene un valor devuelto. Llama a SQLProcedureColumns para determinar el tipo (valor devuelto, entrada, entrada/salida o salida) de cada parámetro del procedimiento.