0

我正在尝试通过存储过程获取结果集。

当我调用该程序时,它给了我一个 ORA-01036:非法变量名/编号\n。

我正在使用 node-oracledb 来获取数据。实施如下。请就如何正确处理它提供一些建议。

router.put('/get-data/', jsonParser, function (req, res) {

var data = req.body;

logger.info("Begin: " + (new Date().toString()));

pool.getConnection(function (err, connection) {
    logger.info("Begin Connection: " + (new Date().toString()));
    if (err) {
        logger.error(err.message);
        return;
    }

    var bindvars = {
        userName: data.userName,
        filterText: data.appId,
        sortCol: data.sortCol,
        numRows: data.numRows,
        startRow: data.startRow,
        resultSet: {dir: oracledb.BIND_OUT, type: oracledb.STRING, maxSize: 32767},
        error: {dir: oracledb.BIND_OUT, type: oracledb.STRING, maxSize: 4000}
    };

    console.log(bindvars);

    logger.info("Bindvars Set: " + (new Date().toString()));
    logger.info('***********************************');
    logger.info('Get Data - PUT');
    logger.info('User Name: ', bindvars.userName);
    logger.info('Filter Text: ', bindvars.filterText);
    logger.info('Sort: ', bindvars.sortCol);
    logger.info('Page Length: ', bindvars.numRows);
    logger.info('Start Row: ', bindvars.startRow);
    logger.info('***********************************');

    logger.info("Begin execute: " + (new Date().toString()));

    //PL/SQL function syntax
    connection.execute(
        "BEGIN procedure(:userName, :filterText, :sort, :numRows, :startRow, :resultSet, :error); END;",
        bindvars,
        function (err, result) {
            logger.info("End execute: " + (new Date().toString()));
            if (err) {
                logger.error(err.message);
                doRelease(connection);
                return;
            }

            logger.info("Send JSON: " + (new Date().toString()));
            console.log(result);
            res.send(result);
            logger.info("JSON Sent: " + (new Date().toString()));

            doRelease(connection);
        });
});
});

我的绑定变量如下:

{ 
    userName: 'Arun',
    filterText: '',
    sortCol: 'application_name',
    numRows: 10,
    startRow: 0,
    resultSet: { dir: 3003, type: 2001, maxSize: 32767 },
    error: { dir: 3003, type: 2001, maxSize: 4000 } 
}

这是包的测试声明。

set define ON;
declare  


   v_user_name            varchar2(100) := 'Arun';
   v_filter_text        VARCHAR2(30) := 'A123';
   v_sort               VARCHAR2(50) := 'application_name';
   v_page_length        PLS_INTEGER  := 10;
   v_start_row          PLS_INTEGER  := 0;
   v_resultset          CLOB;
   v_error              VARCHAR2(200);
begin



get_data(i_user_name => v_user_name,
i_filter_text    => v_filter_text,
   i_sort        => v_sort ,
   i_page_length => v_page_length ,
   i_start_row   => v_start_row ,
   o_resultset   => v_resultset,
   o_error       => v_error );


end;
4

0 回答 0