Oracle PL / SQL 프로 시저 식별자는 오류로 선언되어야합니다.

브라이언 맥 코마스

저는 SQL과 PL / SQL을 처음 접했습니다. 나는 박물관을 가져 가서 미술품 가격을 평균 한 다음 평균을 퍼센트 올리는 절차를 작성하고 있습니다. 사용자는 박물관 ID (musmID) 및 증가율을 입력합니다. 백분율이 너무 높으면 예외가 발생합니다. 입력 한 musmID가 테이블에있는 것과 일치하지 않으면 예외가 발생합니다. 출력은 박물관 이름, 이전 평균 가격 및 새 평균 가격입니다. 지금까지는 유효하지 않은 musmID에 대한 예외가 작성되지 않은 경우에만 작동합니다. PLS-00201 : identifier 'MUMSID'를 선언해야합니다.

표 1은 예술이고 열 이름은 musmID (FK)와 가격입니다. 표 2는 박물관이고 열 이름은 박물관과 musmID (PK)입니다.

내 코드 :

CREATE OR REPLACE PROCEDURE proc_second (p_musmID IN arts.musmID%TYPE,
p_percent IN NUMBER) IS

v_musmID arts.musmID%TYPE;
v_oldavg arts.price%TYPE;
v_newavg arts.price%TYPE;
v_musmName museums.museum%TYPE; 
too_high EXCEPTION;
musmID_invalid EXCEPTION;

BEGIN
IF p_percent > 40 THEN
  raise too_high;
END IF;
IF musmID != p_musmID THEN
  raise musmID_invalid;
END IF;

SELECT musmID, AVG(price) INTO v_musmID, v_oldavg from arts
WHERE musmID = p_musmID
GROUP BY musmID;

SELECT museum INTO v_musmName from museums
WHERE musmId = p_musmID;

v_newavg := v_oldavg * (1 + (p_percent/100));

dbms_output.put_line (v_musmname || ' ' || v_oldavg || ' ' || v_newavg);

EXCEPTION
WHEN too_high THEN
dbms_output.put_line ('Specify less than 40 percent increase');
WHEN musmID_invalid THEN
dbms_output.put_line ('You entered an invalid museum ID');

END;
/

Warning: Procedure created with compilation errors.

이것이 내가 얻는 오류입니다.

LINE/COL ERROR
-------- -----------------------------------------------------------------
15/3     PL/SQL: Statement ignored
15/6     PLS-00201: identifier 'MUSMID' must be declared

나는 그것이 아마도 내가 보지 못하는 기본적인 것임을 알고 있지만 지금까지 오류를 제거하면 입력 된 내용에 관계없이 절차에서 musmID_invalid 예외가 발생합니다.

리틀 풋

허. 이 코드는 내가 알 수있는 한 잘못 배열되어 있습니다. 먼저 변수를 확인한 다음 그 값을 가져옵니다.

프로 시저를 컴파일하기 위해 두 개의 더미 테이블을 만들었습니다.

SQL> create table arts
  2    (musmid number,
  3     price  number);

Table created.

SQL> create table museums
  2    (musmid number,
  3     museum number);

Table created.

이제 절차 : V_MUSMID변수가 P_MUSMID매개 변수와 같기 때문에 변수 가 전혀 필요하지 않은 것 같습니다 ( 및 해당 SELECT을 선택하는 참조 ). 대신 코드 전체에서 사용할 수 있습니다 .AVG(PRICE)WHEREP_MUSMIDV_MUSMID

그것은 또한 MUSMID_INVALID결코 제기되지 않을 것임을 의미합니다 . 하지만 NO_DATA_FOUND존재하지 않는을 전달하면 발생하는을 처리해야합니다 P_MUSMID.

그래서, 필요하지 않다고 생각하는 것을 제거했습니다. 이것은 나머지 코드입니다. 그것이 좋은지 확인하십시오.

SQL> create or replace procedure proc_second (p_musmid  in arts.musmid%type,
  2                                           p_percent in number)
  3  is
  4    v_oldavg       arts.price%type;
  5    v_newavg       arts.price%type;
  6    v_musmname     museums.museum%type;
  7    too_high       exception;
  8  begin
  9    if p_percent > 40 then
 10       raise too_high;
 11    end if;
 12
 13    select m.museum, avg(a.price)
 14      into v_musmname, v_oldavg
 15      from arts a join museums m on m.musmid = a.musmid
 16      where a.musmid = p_musmid
 17      group by m.museum;
 18
 19    v_newavg := v_oldavg * (1 + (p_percent/100));
 20
 21    dbms_output.put_line (v_musmname || ' ' || v_oldavg || ' ' || v_newavg);
 22
 23  exception
 24    when too_high then
 25      dbms_output.put_line ('Specify less than 40 percent increase');
 26    when no_data_found then
 27      dbms_output.put_line ('You entered an invalid museum ID');
 28  end;
 29  /

Procedure created.

SQL> exec proc_second(1, 20);
You entered an invalid museum ID

PL/SQL procedure successfully completed.

SQL>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

PL / SQL 사용 저장 프로 시저 오류-식별자를 선언해야합니다.

Oracle PL / SQL 프로 시저 선언을 T-SQL 프로 시저로 변환

ORACLE PL / SQL 저장 프로 시저 삽입 및 실행 오류

저장 프로시저 Oracle PL/SQL에 대한 오류를 어떻게 수정합니까?

식별자 'SYS.DBMS_SQL'은 오류로 선언되어야합니다.

병합없이 Oracle PL / SQL 프로 시저 다시 작성

print_line은 pl / sql 오류로 선언되어야합니다.

print_line은 pl / sql 오류로 선언되어야합니다.

Oracle PL / SQL 프로 시저를 호출 할 때 사용되는 인코딩

Select에 사용되는 프로 시저 매개 변수 (Oracle, PL / SQL)

Oracle SQL : Xmlagg로 선택시 식별자 누락 오류

Oracle PL SQL 프로시 저는 프로 시저의 마지막 명령문이 처리 된 후 완료하는 데 오랜 시간이 걸립니다.

저장 프로시저 오류 1520: 파일 번호:ORA-06502: PL/SQL: oracle_cx python 드라이버에서 호출할 때 숫자 또는 값 오류

동적 테이블 이름이 있는 Oracle PL/SQL 저장 프로시저

일반 SQL 쿼리를 PL/SQL 프로시저로 변환(Oracle)

Oracle PL / SQL 저장 프로 시저 생성

ODI에서 Oracle PL / SQL 저장 프로 시저 호출

저장 프로 시저 오류 PLS-00201 : 식별자 'UTL_HTTP'를 선언해야합니다.

Entity Framework 5.0 식별자는 오류로 선언되어야합니다.

Entity Framework 5.0 식별자는 오류로 선언되어야합니다.

Oracle PL/SQL 루프 인덱스 변수 'I' 사용에서 저장 프로시저를 실행할 때 오류가 발생했습니다.

PL / SQL : 다른 프로 시저에서 프로 시저 실행

병렬로 프로시저 실행 - Oracle PL/SQL

PL / SQL에서 '식별자를 선언해야합니다'라는 오류는 무엇을 의미합니까?

프로 시저에 전달되는 각 테이블 이름에 대한 ORACLE PL / SQL

Oracle PL / SQL : 프로 시저가 이미 실행 중인지 감지하는 방법은 무엇입니까?

오라클 바인딩 변수 저장 날짜, 반환 식별자는 오류로 선언되어야합니다.

저장 프로 시저-PL / SQL-삽입 오류

Oracle PL/SQL 프로시저에서 데이터 상태 "고정"

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관