jjzjj

mysql - NODEJS - mysqlPool.getConnection - 在 MYSQL 中调用存储过程 - 输出返回值

coder 2023-10-26 原文

我在 mysql 中有一个存储过程工作正常。我试图用 NODEJS 调用它。如何在 nodejs 中获取存储过程的输出值?

  mysqlPool.getConnection(function(error,conn){
        conn.query(" SET @p1   =   '"  + P_MEMBER_ID           + "'  ; " +
            " SET @p2      =       '"  + P_MEMBER_ID_TEST      + "'  ; " +
            " SET @p3      =       @insertResults'"  + "'  ; " +
            "CALL PROC_MEMBER_INSERT(" +
                " @p1   ,  "  +
                " @p2   ,  "  +
                " @p3 )", function(error,results)
            {
                if (error)
                {
                    console.error(error);
                    throw error;
                }else{
                    console.log(results);
                     res.status(200).jsonp({insertResults:test[2][0]});       
                };
            });
            conn.release();
        });





      MYSQL stored proc example. 
      ..
     CREATE DEFINER=`phil`@`%` PROCEDURE `PROC_MEMBER_INSERT`(
       in P_MEMBER_ID         INT,
       in P_MEMBER_ID_TEST    INT,
      out RESULT_MESSAGE          varchar(120)
      )
      BEGIN
       .....

谢谢 菲尔

========================

我还有问题...

   var connection = mysql.createConnection({
        host: '11.11.11.11',
        user: 'phil',
        password: 'password',
        port: 3306,
        database: 'testdb',
        connectionLimit : 100,
        multipleStatements: true
    });



    var query = connection.query(" SET @p1      =       '"  + P_MEMBER_ID                    + "'  ; " +
                                 " SET @p2      =       '"  + P_MEMBER_ID_TEST               + "'  ; " +
                                 " SET @p3      =            @insertResults "                + "   ; " +
         "CALL PROC_MEMBER_INSERT(" +
        " @p1   ,  "  +
        " @p2   ,  "  +
        " @p3 ); select @insertResults;");
    query
        .on('error', function(err) {
            // Handle error, an 'end' event will be emitted after this as well
            console.log('error  ============= ', err);
        })
        .on('fields', function(fields) {
            // the field packets for the rows to follow

            console.log('fields ============= ', fields);

            //res.status(200).jsonp({insertResults:fields});       
        })
        .on('result', function(row) {
            // Pausing the connnection is useful if your processing involves I/O
            // connection.pause();

            console.log('results ============= ', row);

            //res.status(200).jsonp({insertResults:row});      

            //processRow(row, function() {
            //    connection.resume();
            //});
        })
        .on('end', function() {
            // all rows have been received
        });


  MYSQL stored proc example. 
  ..
 CREATE DEFINER=`phil`@`%` PROCEDURE `PROC_MEMBER_INSERT`(
   in P_MEMBER_ID         INT,
   in P_MEMBER_ID_TEST    INT,
  out RESULT_MESSAGE          varchar(120)
  )
  BEGIN
   ....

输出看起来是空的。

没有输入记录。

   ========= output ==============

           api: 2 -- end PROC_MEMBER_INSERT
            api: 2 P_MEMBER_ID ---------->  5
            api: 2 P_MEMBER_ID_TEST ----->  1195
            results =============  { fieldCount: 0,
              affectedRows: 0,
              insertId: 0,
              serverStatus: 10,
              warningCount: 0,
              message: '',
              protocol41: true,
              changedRows: 0 }
            results =============  { fieldCount: 0,
              affectedRows: 0,
              insertId: 0,
              serverStatus: 10,
              warningCount: 0,
              message: '',
              protocol41: true,
              changedRows: 0 }
            results =============  { fieldCount: 0,
              affectedRows: 0,
              insertId: 0,
              serverStatus: 10,
              warningCount: 0,
              message: '',
              protocol41: true,
              changedRows: 0 }
            results =============  { fieldCount: 0,
              affectedRows: 1,
              insertId: 0,
              serverStatus: 10,
              warningCount: 0,
              message: '',
              protocol41: true,
              changedRows: 0 }
            fields =============  [ { catalog: 'def',
                db: '',
                table: '',
                orgTable: '',
                name: '@RESULT_MESSAGE',
                orgName: '',
                charsetNr: 63,
                length: 16777216,
                type: 251,
                flags: 128,
                decimals: 31,
                default: undefined,
                zeroFill: false,
                protocol41: true } ]
            results =============  { '@insertResults': null }

=============

我添加了更多测试内容,现在看到它正在下降到 .on('result and always null.


          results =============  { fieldCount: 0,
            affectedRows: 0,
            insertId: 0,
            serverStatus: 10,
            warningCount: 0,
            message: '',
            protocol41: true,
            changedRows: 0 }
          row user not found
          results =============  { fieldCount: 0,
            affectedRows: 0,
            insertId: 0,
            serverStatus: 10,
            warningCount: 0,
            message: '',
            protocol41: true,
            changedRows: 0 }
          row user not found
          results =============  { fieldCount: 0,
            affectedRows: 0,
            insertId: 0,
            serverStatus: 10,
            warningCount: 0,
            message: '',
            protocol41: true,
            changedRows: 0 }
          row user not found
          results =============  { fieldCount: 0,
            affectedRows: 1,
            insertId: 0,
            serverStatus: 2,
            warningCount: 0,
            message: '',
            protocol41: true,
            changedRows: 0 }


      .on('error', function(err) {
            // Handle error, an 'end' event will be emitted after this as well
            console.log('error  ============= ', err);
            return;
        })
        .on('fields', function(fields) {
            // the field packets for the rows to follow
            console.log('fields ============= ', fields);



            if (fields && fields.length)
                console.log('fields user found :)');
            else
                console.log('fields user not found');




            //res.status(200).jsonp({winkResults:fields}); 
        })
        .on('result', function(row) {
            // Pausing the connnection is useful if your processing involves I/O
            // connection.pause();

            console.log('results ============= ', row);

            if (row && row.length)
                console.log('row user found :)');
            else
                console.log('row user not found');


            //res.status(200).jsonp({winkResults:row});      

            //processRow(row, function() {
            //    connection.resume();
            //});
        })
        .on('end', function() {


            // all rows have been received
        });

最佳答案

在您的 con.query 语句中添加 select @p3;,就在 CALL PROC_MEMBER_INSERT 之后

希望这对您有所帮助!

关于mysql - NODEJS - mysqlPool.getConnection - 在 MYSQL 中调用存储过程 - 输出返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140391/

有关mysql - NODEJS - mysqlPool.getConnection - 在 MYSQL 中调用存储过程 - 输出返回值的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  5. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  6. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  7. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  8. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  9. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  10. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

随机推荐