【问题标题】:Stored procedure with input and output SQL带有输入和输出 SQL 的存储过程
【发布时间】:2018-05-24 20:41:38
【问题描述】:

我正在尝试创建一个存储过程,它接受一个名称/或数字并返回该名称/数字的特定值

所以在这段代码中,我正在尝试编写一个存储过程,它采用公司名称或 cvr 编号并返回该公司的合规程度

    DROP DATABASE IF EXISTS DRCS;
    CREATE DATABASE DRCS;
    USE DRCS; 

    CREATE TABLE Companies ( 
            ID INT not null,
            Name varchar(255), 
            primary key (ID) 
    ); 

    CREATE TABLE CVR (
            ID INT not null,
            CVR_Number INT 
    ); 

    CREATE TABLE Compliance (
            ID INT not null,
            Complaince_level varchar(255)
    ); 

    CREATE TABLE GDPR (
            ID INT not null,
            GDPR_steps varchar(255) 
    ); 

                INSERT INTO Companies VALUES 
                (1, 'TDC'),
                (2, 'MAERSK'),
                (3, 'LEGO'), 
                (4, 'SAS'),
                (5, 'Carlsberg');

                INSERT INTO CVR VALUES 
                (11, '14773908'),
                (12, '32345794'),
                (13, '47458714'),
                (14, '56994912'),
                (15, '61056416');

                INSERT INTO Compliance VALUES 
                (21, '10%'),
                (22, '20%'),
                (23, '40%'),
                (24, '60%'),
                (25, '80%');

                INSERT INTO GDPR VALUES 
                (31, '1. Awareness'),
                (32, '2. Information you hold'),
                (33, '3. Communication privacy information'),
                (34, '4. Individuals rights'),
                (35, '5. Subject access requests'); 

#HERE MY PROBLEM STARTS                

    DELIMITER $$
        CREATE PROCEDURE DoC() 
        BEGIN 
        SELECT * FROM Companies , CVR, Compliance, GDPR; 

        END $$
    DELIMITER ;


    CALL DoC;

【问题讨论】:

  • 存储过程不“返回”值。也许你想要一个函数。
  • 想详细说明问题是什么?也许是错误消息?
  • 嗯,存储过程只是一个存储函数,是的,它是我尝试编写的一个函数。
  • @MatBailie,问题不是错误,而是我将如何进行。我只是想问问你们这些了不起的人对我的问题有什么想法。
  • “嗯,存储过程只是一个存储函数......”不,那不是真的 MySQL 文档明确区分了存储过程和存储函数......

标签: mysql sql


【解决方案1】:

四个表之间没有任何关系! 为所有表创建具有通用 id 的行,例如 id = 1,2,3,4,然后进行连接,然后尝试列出您要查看的字段。

插入公司价值观 (1, 'TDC'), (2,“马士基”), (3,“乐高”), (4, 'SAS'), (5, '嘉士伯');

            INSERT INTO CVR VALUES 
            (1, '14773908'),
            (2, '32345794'),
            (3, '47458714'),
            (4, '56994912'),
            (5, '61056416');

            INSERT INTO Compliance VALUES 
            (1, '10%'),
            (2, '20%'),
            (3, '40%'),
            (4, '60%'),
            (5, '80%');

            INSERT INTO GDPR VALUES 
            (1, '1. Awareness'),
            (2, '2. Information you hold'),
            (3, '3. Communication privacy information'),
            (4, '4. Individuals rights'),
            (5, '5. Subject access requests'); 

从公司 c, cvr v 中选择 c.id,v.cvr_Number 其中 c.id = v.id

同样通过加入 id 来添加更多表。您不需要为此设置程序,并且程序不是为此而设计的。

【讨论】:

  • 是的,这就是我现在正在做的事情。但是,这只会创建一个显示所有关系的表格,并不能解决我的功能问题。
  • 根据您的输入编写一个将返回一个值的 fn。从表 a、表 b 中选择字段,其中 a.id = b.id;
【解决方案2】:

您可以对所有表进行联合查询。但是所有选择查询的clomum count应该是一样的。

DELIMITER $$
    CREATE PROCEDURE DoC() 
  SELECT A.id,A.name FROM
   ( SELECT id as id , name as name FROM Companies 
    UNION ALL
    SELECT id as id , name as name FROM CVR
    UNION ALL
    SELECT id as id , name as name FROM Compliance
    UNION ALL
    SELECT id as id , name as name FROM  GDPR) as A

  END $$
DELIMITER ;

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多