Pl SQL Oracle PLS-00103:遇到符号“CREATE”
Posted
技术标签:
【中文标题】Pl SQL Oracle PLS-00103:遇到符号“CREATE”【英文标题】:Pl SQL Oracle PLS-00103: Encountered the symbol "CREATE" 【发布时间】:2015-11-10 02:53:10 【问题描述】:此代码接受邮政编码、城市和州的输入,然后将其插入到创建的地址表中。在插入数据之前,它将检查邮政编码是否已经在表中,如果是,则调用 procedure(error) 以显示错误代码。
我收到错误代码 pls-00103:尝试执行代码时遇到符号“CREATE”。到目前为止,这是我的代码。感谢您提前提供任何帮助。
drop table address;
create table address(zipcode NUMBER, city varchar2(30), state varchar2(20));
create or replace procedure error as
begin
dbms_output.put_line('Error Zip Code already found in table');
end error;
declare
zzip number;
ccity varchar2(30);
sstate varchar2(30);
create or replace procedure location(p_zipcode NUMBER,
p_city varchar2,
p_state varchar2) is
zip address.zipcode%type;
cit address.city%type;
st address.state%type;
begin
select count(*) from address into zip where zipcode = zip;
if any_rows_found then
error;
else
Insert into address values(zip, cit, st);
end if;
end location;
begin
select &zipcode into zzip from dual;
select &city into ccity from dual;
select &state into sstate from dual;
procedure location(zzip, ccity, sstate);
end;
/
【问题讨论】:
in
/out
在create table
语句中做了什么?
无法修复,抱歉
procedure location(zzip, ccity, sstate);
是错误的。你不会调用这样的过程。
【参考方案1】:
我不确定您要做什么,但以下内容可能更接近您的想法:
drop table address;
create table address(zipcode NUMBER, city varchar2(30), state varchar2(20));
declare
zzip number;
ccity varchar2(30);
sstate varchar2(30);
procedure error is
begin
dbms_output.put_line('Error Zip Code already found in table');
end error;
procedure location(p_zipcode NUMBER, p_city varchar2, p_state varchar2) is
zip_count NUMBER;
begin
select count(*)
into zip_count
from address
where zipcode = p_zipcode;
if zip_count > 0 then
error;
else
Insert into address
(zipcode, city, state)
values
(p_zipcode, p_city, p_state);
end if;
end location;
begin
select &zipcode into zzip from dual;
select &city into ccity from dual;
select &state into sstate from dual;
location(zzip, ccity, sstate);
end;
/
祝你好运。
【讨论】:
它的简称是接受用户输入的邮政编码、城市和州。然后检查该邮政编码是否已经在创建的表地址中。如果是则显示错误,如果不插入数据 非常感谢@bobjarvis。在代码的最后选择 &city into ccity from dual;是否需要进行任何更改才能接受城市名称。它应该接受 varchar2(30) 不应该吗? 没关系,在输入周围使用 ' ' 修复它:) 再次感谢!【参考方案2】:我不知道我是否正确理解了您的问题,但我想提出一些更正来回答您的问题
首先,如果您要创建一个过程/函数,请在单独的工作表中进行,然后编译它。不要与其他匿名块一起编译,因为大多数情况下,如果您不以'/'结束其他块,肯定会产生错误。
其次,你的 DECLARE 语句放错了位置,如果你要创建一个匿名块,请确保 DECLARE、BEGIN 和 END 对齐,不要在匿名块内创建过程/函数。
第三,您在过程中声明变量并使用它们,但没有初始值,因此它只会将空值传递给过程中的 DML 语句。直接使用参数就好了。
第四,避免创建只包含 dbms_output.put_line 的过程。太傻了。
最后,你的匿名块应该调用你的过程,使用'&',请避免在pl/sql中使用'&',因为'&'是SQL*Plus中的一个特性,在PL/SQL中没有任何意义, 而您可以使用 ':' 作为绑定变量。但是你在绑定变量中没有使用'&',所以你应该删除它;
试试这个:
drop table address;
/
create table address(zipcode NUMBER, city varchar2(30), state varchar2(20));
/
create or replace procedure location(p_zipcode NUMBER,
p_city varchar2,
p_state varchar2) is
zip address.zipcode%type;
begin
select count(*)
from address
into zip
where zipcode = p_zipcode
and city =p_city
and state = p_state;
if zip > 0 then
dbms_output.put_line('Error Zip Code already found in table');
else
Insert into address values(p_zipcode, p_city, p_state);
end if;
end location;
/
begin
location(:zzip, :ccity, :sstate);
end;
【讨论】:
以上是关于Pl SQL Oracle PLS-00103:遇到符号“CREATE”的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL-SQL 函数出现错误 PLS-00103:在预期以下情况之一时遇到符号“SELECT”
PL/SQL 函数错误 - PLS-00103:遇到符号“IS”