gpt4 book ai didi

MySQL 程序接受用户输入并显示与结果相同的结果 - 不工作

转载 作者:行者123 更新时间:2023-11-29 20:40:45 25 4
gpt4 key购买 nike

我一直在努力编写MySQL存储过程来接受用户输入并显示与结果相同的结果。这是我的示例代码...在下面的代码中,我声明了局部变量并将其显示回用户作为第一步。

<小时/>
DELIMITER $$
CREATE PROCEDURE USER_INPUT()
BEGIN
declare TITLE VARCHAR(20);
declare SEVERITY INT;
declare OPENDATE DATETIME;
declare CLOSEDATE DATETIME;
SET TITLE = 'ABC';
SET SEVERITY = 1;
SET OPENDATE = ADDDATE(current_timestamp, -31);
SET CLOSEDATE = current_timestamp;
SELECT 'You Entered '|| TITLE || ' ' || SEVERITY || ' ' || OPENDATE || ' ' || CLOSEDATE;
SELECT 'You Entered '|| TITLE;
INSERT INTO BUGS(TITLE, SEVERITY, OPENDATE, CLOSEDATE) VALUES(TITLE, SEVERITY, OPENDATE, CLOSEDATE);
END $$
DELIMITER ;

Invoking as below...
DELIMITER $$
BEGIN
CALL USER_INPUT();
END;
DELIMITER ;

create table `bugs` (
ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
TITLE VARCHAR(20) NOT NULL,
SEVERITY INT NOT NULL check(SEVERITY>0 && SEVIRITY<5),
OPENDATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CLOSEDATE DATETIME default NULL
)ENGINE=MyISAM DEFAULT CHARSET=latin1;
<小时/>

观察...

1.存储过程运行的输出不符合预期。附上输出屏幕截图。

  • 我尝试修改该过程,以便它应该接受用户输入......创建过程 USER_INPUT(@TITLE VARCHAR(20)、@SEVERITY INT、@OPENDATE DATETIME、@CLOSEDATE DATETIME)
  • 上面是第一行本身会导致编译错误。即我不确定语法。

  • 尽管输出不如预期,但令人惊讶的是,插入查询已正确完成工作(验证插入的行具有正确的值)
  • 请建议更改过程代码,以便它接受用户输入(而不是在过程中设置值)并将结果显示给用户。谢谢。

    enter image description here

    最佳答案

    select 语句正在创建一个奇怪的转义序列,并且它无意提供您希望的输出。部分原因是你可能尝试做的事情的分离被搞乱了。例如,如果您尝试创建带有文本的标题或实际输出变量。也许根据您的需要,查看 concat()

    将其拉回到此处 50K 英尺。即使这样做也不要太陷入困境。存储过程主要不适用于用户输入和报告编写(请阅读:请不要将它们用于此目的)。所以也许你试图错误地使用它们!

    接下来,禁止在调用存储过程时使用用户变量(带有 @ 的变量)作为参数,正如您在文本中显示的所谓#2 所示。

    此外,您不需要如此复杂地阻止测试调用。请记住,分隔符仅用于阻止创建存储过程的调用。您不需要为测试调用编写这样的代码。它只是:

    CALL USER_INPUT();

    因此,这会将 5 行代码减少到 1 行。

    尝试以下操作

    DROP PROCEDURE IF EXISTS USER_INPUT;
    DELIMITER $$
    CREATE PROCEDURE USER_INPUT
    ( TITLE VARCHAR(20),
    SEVERITY INT,
    SomeDateNotUsed DATETIME -- not used
    )
    BEGIN
    DECLARE OPENDATE DATETIME;
    DECLARE CLOSEDATE DATETIME;

    SET TITLE = 'ABC';
    SET SEVERITY = 1;
    SET OPENDATE = ADDDATE(current_timestamp, -31);
    SET CLOSEDATE = current_timestamp;
    SET @str=CONCAT(TITLE,'||',SEVERITY,'||',OPENDATE,'||',CLOSEDATE);
    INSERT INTO BUGS(TITLE, SEVERITY, OPENDATE, CLOSEDATE) VALUES(TITLE, SEVERITY, OPENDATE, CLOSEDATE);
    SELECT @str as 'You Entered';
    END $$
    DELIMITER ;

    测试:

    CALL USER_INPUT('a',1,'2016-05-14');
    +--------------------------------------------------+
    | You Entered |
    +--------------------------------------------------+
    | ABC||1||2016-06-28 17:05:58||2016-07-29 17:05:58 |
    +--------------------------------------------------+

    关于MySQL 程序接受用户输入并显示与结果相同的结果 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38651655/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com