程序中的文本参数



我有一个任务要解决。

创建一个过程,根据countries表中指定的country_name列出locations表中的所有分支。列表将为country_name、city、street_address、state_provice。如果在该国没有分支机构,请进行处理。在PL/SQL中调用"Zambia"的过程。

这是我写的,但我在某个地方弄错了。你能帮帮我吗?非常感谢。

SET SERVEROUTPUT ON;
CREATE OR REPLACE PROCEDURE POBOCKY(C_NAME IN COUNTRIES.COUNTRY_NAME VARCHAR2(50)%TYPE)
IS CITY_P LOCATIONS.CITY VARCHAR2(30)%TYPE;
S_ADDRESS LOCATIONS.STREET_ADDRESS VARCHAR2(40)%TYPE;
S_PROVINCE LOCATIONS.STATE_PROVINCE VARCHAR2(25)%TYPE;
BEGIN
SELECT COUNTRY_NAME, CITY, STREET_ADDRESS, STATE_PROVINCE INTO
C_NAME, CITY_P, S_ADDRESS, S_PROVINCE FROM COUNTRIES
FULL OUTER JOIN LOCATIONS ON COUNTRIES.COUNTRY_ID = LOCATIONS.COUNTRY_ID
GROUP BY COUNTRY_NAME;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line('Error');
RAISE;
END POBOCKY;
  • 如果从列继承数据类型,则删除显式数据类型
  • 如果参数为IN,则不能选择
  • 完全外部连接?为什么?难道不应该是内在的结合吗。。。
    • 。。。以及WHERE子句,以便按作为参数传递的城市名称筛选行
  • 如果有几行可以返回,请考虑使用循环
    • 这也意味着您不必担心局部变量和(最常见的(异常,如no_data_found和too_many_rows
  • 使用表别名并在列名之前加上别名是一个好习惯;按照你的说法,不可能知道哪个列属于哪个表(所以我不会猜测(

很快,类似这样的东西:

create or replace procedure pobocky
(c_name in countries.country_name%type)
is 
begin
for cur_r in 
(select city, street_address, state_province 
from countries join locations on countries.country_id = locations.country_id
where coutry_name = c_name
)
loop
dbms_output.put_line(c_name ||', '|| cur_r.city ||', '|| cur_r.street_address ||', '||
cur_r.state_province);
end loop;
end pobocky;

相关内容

  • 没有找到相关文章

最新更新