DELIMITER $$ create procedure s_ins(in insno char(8), insname char(20), inssatus char(4),incity char(10)) begin INSERT into s values (insno,insname,inssatus ,incity ) end $$ delimiter ;这个存储过程错在哪呢?
时间: 2024-02-11 16:04:41 浏览: 89
这个存储过程有几个问题:
1. 在第一行代码中,缺少 `CREATE PROCEDURE` 关键字;
2. 在第一行代码中,参数 `in` 的位置错误;
3. INSERT INTO 语句的 VALUES 子句中,缺少括号;
4. 在最后一行代码中,应该使用 `END PROCEDURE` 替代 `END`。
下面是修改后的代码:
```
DELIMITER $$
CREATE PROCEDURE s_ins(IN insno CHAR(8), IN insname CHAR(20), IN inssatus CHAR(4), IN incity CHAR(10))
BEGIN
INSERT INTO s VALUES (insno, insname, inssatus, incity);
END PROCEDURE $$
DELIMITER ;
```
修改后的存储过程应该就没有问题了。
相关问题
DELIMITER $$ CREATE PROCEDURE s_ins(IN insno CHAR(8), IN insname CHAR(20), IN inssatus CHAR(4), IN incity CHAR(10),out bok char(4)) BEGIN INSERT INTO s VALUES (insno, insname, inssatus, incity); set bok='ok'; END PROCEDURE $$ DELIMITER ;错在哪呢?
在创建存储过程时,如果使用了参数,那么参数的数据类型需要指定长度,但是在声明存储过程时,不需要指定参数的长度。因此,你需要将存储过程的参数中的数据类型长度去掉,如下所示:
```
DELIMITER $$
CREATE PROCEDURE s_ins(IN insno CHAR(8), IN insname CHAR(20), IN inssatus CHAR(4), IN incity CHAR(10), OUT bok CHAR(4))
BEGIN
INSERT INTO s VALUES (insno, insname, inssatus, incity);
SET bok = 'ok';
END$$
DELIMITER ;
```
此外,你在存储过程中声明了一个输出参数`bok`,但是在存储过程中并没有对其进行赋值,因此需要在存储过程中加入`SET`语句来为其赋值。
delimiter $$ create procedure mydb6_view.proc01() begin select empno,ename from emp; end $$ delimiter ;
这是一个 MySQL 存储过程,它的作用是查询 emp 表中的员工编号和姓名。下面是该存储过程的代码解释:
- `delimiter $$`:将语句结束符号从分号 `;` 改为双美元符号 `$$`,这样可以在存储过程中使用分号,避免与 SQL 语句中的分号混淆。
- `create procedure mydb6_view.proc01()`:创建一个名为 `mydb6_view.proc01` 的存储过程。
- `begin`:开始存储过程的代码块。
- `select empno,ename from emp;`:查询 emp 表中的员工编号和姓名。
- `end`:结束存储过程的代码块。
- `$$`:结束语句。
最后,`delimiter ;` 将语句结束符号恢复为默认的分号 `;`。
要执行该存储过程,可以使用以下代码:
```
call mydb6_view.proc01();
```
执行该代码后,将会查询 emp 表中的员工编号和姓名,并输出结果。
阅读全文