【问题标题】:Passing arguments to stored procedures MySql将参数传递给存储过程 MySql
【发布时间】:2012-10-13 17:20:34
【问题描述】:

我在我的数据库中创建了带有 IN 参数的过程(MySql->Routines->Create Procedure)。 我正在使用它来创建一个新数据库。当我调用程序并传递参数时, 新数据库已创建,但新数据库的名称是我在过程中使用的变量的名称,而不是我作为参数传递的名称。

创建过程 dbCreate (IN dbName VARCHAR(255))

开始

    CREATE DATABASE IF NOT EXISTS dbName COLLATE utf8_bin;
    CREATE TABLE IF NOT EXISTS dbName.City(
    .
    .
    .
    );
    

当我调用程序 dbCreate 时,

使用旧数据库;

调用 old_database.dbCreate('FRANCE');

MySql 生成名为 dbName 的新数据库。

【问题讨论】:

标签: mysql sql stored-procedures parameter-passing


【解决方案1】:

把你的语句当作一个字符串来构造:

SET @s = CONCAT('USE old_database; CALL old_database.dbCreate(', dbName,');');
PREPARE stmt FROM @s;
EXECUTE stmt;

【讨论】:

  • 我尝试使用上述语句,但收到错误:“字段列表中的未知列”。我使用单引号来创建字符串
  • CREATE DEFINER=user@% PROCEDURE dbCreate(IN dbName VARCHAR(255)) BEGIN SET @x='如果不存在则创建数据库?整理 utf8_bin';准备语句 FROM @x;使用@dbName 执行语句;此代码将变量 dbName 设置为我传递的参数,但现在当我尝试执行该过程时收到语法错误 1064
  • 已解决。我对数据库中的所有表都使用了 CONCAT 函数。
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多