2017-08-17 82 views
0
CREATE PROCEDURE p_samp(
    IN p_id INT,IN p_table_choice VARCHAR(10) 
) 
    BEGIN 

    CASE p_table_choice 

     WHEN p_table_choice = 'A' THEN 
        USE database1; 
          update sample1 
          SET name = 'sam' 
          WHERE id = p_id; 

     WHEN p_table_choice = 'B' THEN 
        USE database2; 
          update sample2 
          SET name = 'sam' 
          WHERE id = p_id; 

     ELSE 
      BEGIN 
      END; 
    END CASE ; 

    END; 
+0

尝试:'更新database1.sample1 ...'和'更新database2.sample2'。 – wchiquito

+0

此解决方案不起作用 –

+0

请参见[https://stackoverflow.com/a/45739429/1316440](https://stackoverflow.com/a/45739429/1316440)。 – wchiquito

回答

0

你可以试试:

CREATE PROCEDURE p_samp(
IN p_id INT,IN p_table_choice VARCHAR(10) 
) 
BEGIN 

CASE p_table_choice 

    WHEN p_table_choice = 'A' THEN 
         update database1.sample1 
         SET name = 'sam' 
         WHERE id = p_id; 

    WHEN p_table_choice = 'B' THEN 
         update database2.sample2 
         SET name = 'sam' 
         WHERE id = p_id; 

    ELSE 
     BEGIN 
     END; 
END CASE ; 

END; 

我尝试了样品的过程和它的工作。

这是我想两个数据库learningpricing >>

CREATE PROCEDURE `xxxx`(A int(1)) 
begin 
case A 
when 1 then update learning.GAUL set user='OBELIX' where id=1; 
when 0 then update pricing.K1 set amntIN='500' where account=1; 
else 
select 'DUMMY'; 
END CASE; 
END 

之间进行类似的更新所以基本上第一次更新都将导致一个受影响的行样本程序:第二个将导致在2影响行。

我打电话给他们:

mysql> call xxxx(1); 
Query OK, 1 row affected (0.05 sec) 

mysql> call xxxx(0); 
Query OK, 3 rows affected (0.12 sec) 

mysql> call xxxx(3); 
+-------+ 
| DUMMY | 
+-------+ 
| DUMMY | 
+-------+ 
1 row in set (0.00 sec) 
+0

它不工作,程序被创建,但在调用它时,它给出了一个错误 –

+0

@avinashThakur它给出了什么样的错误,当你调用它时? – Krishnakumar

+0

@avinashThakur我在答案中添加了我的示例。让我知道你得到了什么错误。 – Krishnakumar

0

下面的脚本做了期待:

mysql> DROP PROCEDURE IF EXISTS `p_samp`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP TABLE IF EXISTS `database2`.`sample2`, 
    ->      `database1`.`sample1`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP DATABASE IF EXISTS `database2`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP DATABASE IF EXISTS `database1`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE DATABASE IF NOT EXISTS `database1`; 
Query OK, 1 row affected (0.00 sec) 

mysql> CREATE DATABASE IF NOT EXISTS `database2`; 
Query OK, 1 row affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `database1`.`sample1` (
    -> `id` SERIAL, 
    -> `name` VARCHAR(255) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `database2`.`sample2` (
    -> `id` SERIAL, 
    -> `name` VARCHAR(255) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO `database1`.`sample1` 
    -> (`name`) 
    -> VALUES 
    -> ('sam in db1'); 
Query OK, 1 row affected (0.00 sec) 

mysql> INSERT INTO `database2`.`sample2` 
    -> (`name`) 
    -> VALUES 
    -> ('sam in db2'); 
Query OK, 1 row affected (0.00 sec) 

mysql> DELIMITER // 

mysql> CREATE PROCEDURE `p_samp` (
    -> `p_id` BIGINT UNSIGNED, 
    -> `p_table_choice` CHAR(1) 
    ->) 
    -> BEGIN 
    -> CASE `p_table_choice` 
    ->  WHEN 'A' THEN 
    ->  UPDATE `database1`.`sample1` 
    ->  SET `name` = 'sam' 
    ->  WHERE `id` = `p_id`; 
    ->  WHEN 'B' THEN 
    ->  UPDATE `database2`.`sample2` 
    ->  SET `name` = 'sam' 
    ->  WHERE `id` = `p_id`; 
    -> END CASE; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database1`.`sample1`; 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | sam in db1 | 
+----+------------+ 
1 row in set (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database2`.`sample2`; 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | sam in db2 | 
+----+------------+ 
1 row in set (0.00 sec) 

mysql> CALL `p_samp`(1, 'A'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database1`.`sample1`; 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | sam | 
+----+------+ 
1 row in set (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database2`.`sample2`; 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | sam in db2 | 
+----+------------+ 
1 row in set (0.00 sec) 

mysql> CALL `p_samp`(1, 'B'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database1`.`sample1`; 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | sam | 
+----+------+ 
1 row in set (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `name` 
    -> FROM 
    -> `database2`.`sample2`; 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | sam | 
+----+------+ 
1 row in set (0.00 sec) 
相关问题