Oracle 当我选择
我目前有一个程序存储在一个包中。我想从客户机表中获取所有数据,但我有一个错误。问题出在p_listar_客户端存储的过程中 代码是: 创建表并插入Oracle 当我选择,oracle,plsql,plsqldeveloper,plsql-package,Oracle,Plsql,Plsqldeveloper,Plsql Package,我目前有一个程序存储在一个包中。我想从客户机表中获取所有数据,但我有一个错误。问题出在p_listar_客户端存储的过程中 代码是: 创建表并插入 create table cliente (id NUMBER, name VARCHAR(50), address VARCHAR(50), salary NUMBER); INSERT INTO cliente VALUES (1, 'camilo chaparro', 'popayan', 563321); INSERT INTO clien
create table cliente (id NUMBER, name VARCHAR(50), address VARCHAR(50), salary NUMBER);
INSERT INTO cliente VALUES (1, 'camilo chaparro', 'popayan', 563321);
INSERT INTO cliente VALUES (2, 'ernesto lopez', 'ibague', 768954);
INSERT INTO cliente VALUES (3, 'camila españa', 'medellin', 113456);
INSERT INTO cliente VALUES (4, 'john jimenez', 'pasta', 789456);
INSERT INTO cliente VALUES (5, 'silvio jimenez', 'cali', 456123);
创建包:
CREATE OR REPLACE PACKAGE paquete_cliente_listar IS
--add clientes
PROCEDURE p_agregar_clientes (
c_id IN cliente.id%TYPE,
c_name IN cliente.name%TYPE,
c_address IN cliente.address%TYPE,
c_salary IN cliente.salary%TYPE
);
--delete clientes
PROCEDURE p_quitar_clientes (c_id IN cliente.id%TYPE);
--Lists all customers
PROCEDURE p_listar_cliente;
--listar todos los clientes
END paquete_cliente_listar;
车身组件:
CREATE OR REPLACE PACKAGE BODY paquete_cliente_listar AS
--agregar clientes
PROCEDURE p_agregar_clientes (
c_id cliente.id%TYPE,
c_name cliente.name%TYPE,
c_address cliente.address%TYPE,
c_salary cliente.salary%TYPE
) IS
BEGIN
INSERT INTO cliente (id, name, address, salary) VALUES (c_id, c_name, c_address, c_salary);
END p_agregar_clientes;
--quitar clientes
PROCEDURE p_quitar_clientes (c_id IN cliente.id%TYPE) IS
BEGIN
DELETE FROM cliente WHERE id = c_id;
END p_quitar_clientes;
--listar todos los clientes
PROCEDURE p_listar_cliente AS
BEGIN
clientes_cursor cliente%rowtype;
CURSOR clientes_cursor IS
SELECT id, name, address, salary FROM cliente;
OPEN clientes_cursor;
LOOP
FETCH clientes_cursor INTO clientes_cursor;
EXIT WHEN clientes_cursor%notfound;
DBMS_OUTPUT.put_line(clientes_cursor.id || ' ' || clientes.name);
END LOOP;
END p_listar_cliente;
END paquete_cliente_listar;
我有一个问题:
错误:包体PAQUETE\u CLIENTE\u LISTAR
行/列:30/21 PLS-00103:在预期以下情况时遇到符号“客户”:
:=。( @ % ;
符号“:”已替换为“客户”以继续
行/列:32/13 PLS-00103:在预期以下情况之一时遇到符号“客户光标”:
:=.(@%;第一个问题是必须在
开始之前声明变量。但是,如果使用游标进行循环,您的代码将更简单、更快,而不是试图弄清楚变量是如何工作的,如下所示:
...
PROCEDURE p_listar_cliente AS
BEGIN
FOR clientes IN
(
SELECT id, name, address, salary FROM cliente
) LOOP
DBMS_OUTPUT.put_line(clientes.id || ' ' || clientes.name);
END LOOP;
END p_listar_cliente;
...
第一个问题是在开始之前必须声明变量。但是,如果使用游标进行循环,则代码将更简单、更快,而不是试图弄清楚变量是如何工作的,如下所示:
...
PROCEDURE p_listar_cliente AS
BEGIN
FOR clientes IN
(
SELECT id, name, address, salary FROM cliente
) LOOP
DBMS_OUTPUT.put_line(clientes.id || ' ' || clientes.name);
END LOOP;
END p_listar_cliente;
...
变量的声明有问题。必须在开始之前声明
PROCEDURE p_listar_cliente AS
clientes_cursor cliente%rowtype; -- moved it before BEGIN
CURSOR clientes_cursor IS
SELECT id, name, address, salary FROM cliente; -- moved it before BEGIN
BEGIN
OPEN clientes_cursor;
LOOP
FETCH clientes_cursor INTO clientes_cursor;
EXIT WHEN clientes_cursor%notfound;
DBMS_OUTPUT.put_line(clientes_cursor.id || ' ' || clientes.name);
END LOOP;
END p_listar_cliente;
使用光标后关闭光标也是一种良好的做法
干杯!!变量声明有问题。必须在开始之前
PROCEDURE p_listar_cliente AS
clientes_cursor cliente%rowtype; -- moved it before BEGIN
CURSOR clientes_cursor IS
SELECT id, name, address, salary FROM cliente; -- moved it before BEGIN
BEGIN
OPEN clientes_cursor;
LOOP
FETCH clientes_cursor INTO clientes_cursor;
EXIT WHEN clientes_cursor%notfound;
DBMS_OUTPUT.put_line(clientes_cursor.id || ' ' || clientes.name);
END LOOP;
END p_listar_cliente;
使用光标后关闭光标也是一种良好的做法
干杯!!PLS-00103是一个语法错误。语法错误通常很容易通过比较我们的代码来解决。PLS-00103是一个语法错误。语法错误通常很容易通过比较我们的代码来解决。