Я какое-то время застревал, пытаясь исправить эту ошибку, и не могу понять. Я исследовал этот код ошибки, и проблема в том, что я пытаюсь сохранить число / символ, которое не может поместиться в переменную. В моем коде все выглядит нормально, и я не могу найти проблему.
Вот информация из таблицы Student:
COLUMN_NAME DATA_TYPE NULLABLE DATA_DEFAULT COLUMN_ID COMMENTS
1 STU_ID NUMBER(6,0) Yes (null) 1 (null)
2 LAME CHAR(8 BYTE) Yes (null) 2 (null)
3 FAME CHAR(8 BYTE) Yes (null) 3 (null)
4 MI CHAR(2 BYTE) Yes (null) 4 (null)
5 SEX CHAR(2 BYTE) Yes (null) 5 (null)
6 MAJOR CHAR(10 BYTE) Yes (null) 6 (null)
7 HOME_STATE CHAR(5 BYTE) Yes (null) 7 (null)
Вот код, который я использую:
SET SERVEROUTPUT ON;
DECLARE
class_num NUMBER(6) := 0;
counter NUMBER := 0;
total NUMBER := 0;
state CHAR(5);
in_state NUMBER := 0;
out_state NUMBER := 0;
Stu_name CHAR;
BEGIN
SELECT COUNT(Home_State) INTO total FROM Student;
FOR counter IN 1..(total)
LOOP
class_num := 10010 + counter;
SELECT Home_State
INTO state
FROM Student
WHERE Stu_ID = class_num;
SELECT Fname
INTO Stu_name
FROM Student
WHERE Stu_ID = class_num;
IF state = 'Tx'
THEN
DBMS_OUTPUT.PUT_LINE(Stu_name||'is in state.');
in_state := in_state + 1;
ELSE
DBMS_OUTPUT.PUT_LINE(Stu_name||'is out of state');
out_state := out_state + 1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('There are '||in_state||' students in state.');
DBMS_OUTPUT.PUT_LINE('There are '||out_state||' students out of state.');
END;
Когда я запускаю код, я получаю следующее сообщение об ошибке:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 18
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if an attempt is made to
assign the value NULL to a variable declared NOT NULL, or if an
attempt is made to assign an integer larger than 99 to a variable
declared NUMBER(2).
*Action: Change the data, how it is manipulated, or how it is declared so
that values do not violate constraints.
Я пытаюсь выяснить, находится ли студент в Техасе или нет. Я добавлю 1 к in_state или out_state в зависимости от того, находится ли студент в Техасе или нет. Я также напечатаю сообщение, сообщающее пользователю, что студент находится в Техасе или за его пределами. Когда l oop закончено, я распечатываю итоги in_state и out_state.