SQLPLUS возвращает только 1 и 0 чисел, используя dbms_output.put_line
http://shrani.si/f/S/52/2l8ZPmn7/stack.jpg
У меня проблема в отношении M:1. У меня есть сущность с именем "Запослени" (M) и сущность с именем "Запори" (1). Проблема появляется, когда я хочу выполнить свою процедуру. Ошибка говорит о том, что мой родительский ключ не был найден, хотя я заполнил свою запорную сущность 20 примерами. Когда я использую "dbms_output.put_line", чтобы увидеть, какая процедура возвращает (перед оператором INSERT), процедура возвращает только 1 и 0, иногда 2 или 4. Я знаю, что процедура должна возвращать числа от 1 до 20.
SQL выглядит так: http://shrani.si/f/45/Nt/ig2Gi8t/stack2.jpg
Теперь мне нужно знать, почему это происходит, и я был бы благодарен, если бы кто-то мог решить эту проблему или хотя бы помочь мне с некоторыми советами.
Код SQL:
CREATE OR REPLACE PACKAGE BODY ui AS
PROCEDURE polni_zaposleni(stevilo_zaposleni NUMBER) IS
id_za NUMBER(10);
ime VARCHAR2(20);
priimek VARCHAR2(20);
del_doba VARCHAR2(20);
id_z NUMBER(10);
id_z_count number:= 0;
BEGIN
select count(1)
into id_z_count
from zaporniki;
FOR st IN 1..stevilo_zaposleni LOOP
id_z := dbms_random.value(1, id_z_count);
ime := 'Ime';
priimek := 'Priimek';
del_doba := 'Del_doba';
ime := ime||' '|| TO_CHAR(st);
priimek := priimek ||' '|| TO_CHAR(st);
del_doba := del_doba ||' '|| TO_CHAR(st);
dbms_output.put_line(id_z);
--INSERT INTO ZAPOSLENI (ID_ZA, IME, PRIIMEK, DEL_DOBA, ID_Z)
--VALUES (st, ime, priimek, del_doba, id_z);
--dbms_output.put_line(st);
END LOOP;
END;
END UI;
1 ответ
Похоже, что работает нормально на SQL Fiddle.
Настройка схемы Oracle 11g R2:
CREATE TABLE zaporniki ( a ) AS
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <=20
/
CREATE TABLE ZAPOSLENI (
ID_ZA NUMBER,
IME VARCHAR2(20),
PRIIMEK VARCHAR2(20),
DEL_DOBA VARCHAR2(20),
ID_Z NUMBER
)
/
CREATE OR REPLACE PACKAGE ui
AS
PROCEDURE polni_zaposleni(stevilo_zaposleni NUMBER);
END ui;
/
CREATE OR REPLACE PACKAGE BODY ui AS
PROCEDURE polni_zaposleni(stevilo_zaposleni NUMBER)
IS
id_za NUMBER(10);
ime CONSTANT VARCHAR2(20) := 'Ime';
priimek CONSTANT VARCHAR2(20) := 'Priimek';
del_doba CONSTANT VARCHAR2(20) := 'Del_doba';
id_z NUMBER(10);
id_z_count NUMBER;
BEGIN
select count(1)
into id_z_count
from zaporniki;
FOR st IN 1..stevilo_zaposleni LOOP
id_z := dbms_random.value(1, id_z_count);
dbms_output.put_line(id_z);
INSERT INTO ZAPOSLENI (ID_ZA, IME, PRIIMEK, DEL_DOBA, ID_Z)
VALUES (
st,
ime||' '|| TO_CHAR(st),
priimek ||' '|| TO_CHAR(st),
del_doba ||' '|| TO_CHAR(st),
id_z
);
--dbms_output.put_line(st);
END LOOP;
END;
END ui;
/
Запрос 1:
SELECT * FROM zaporniki
| A |
|----|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
Запрос 2:
BEGIN
ui.polni_zaposleni(10);
END;
Запрос 3:
SELECT * FROM ZAPOSLENI
| ID_ZA | IME | PRIIMEK | DEL_DOBA | ID_Z |
|-------|--------|------------|-------------|------|
| 1 | Ime 1 | Priimek 1 | Del_doba 1 | 8 |
| 2 | Ime 2 | Priimek 2 | Del_doba 2 | 16 |
| 3 | Ime 3 | Priimek 3 | Del_doba 3 | 7 |
| 4 | Ime 4 | Priimek 4 | Del_doba 4 | 20 |
| 5 | Ime 5 | Priimek 5 | Del_doba 5 | 11 |
| 6 | Ime 6 | Priimek 6 | Del_doba 6 | 11 |
| 7 | Ime 7 | Priimek 7 | Del_doba 7 | 12 |
| 8 | Ime 8 | Priimek 8 | Del_doba 8 | 8 |
| 9 | Ime 9 | Priimek 9 | Del_doba 9 | 20 |
| 10 | Ime 10 | Priimek 10 | Del_doba 10 | 2 |