SQLPLUS使用dbms_output.put_line仅返回1和0数字

时间:2013-12-17 13:11:10

标签: sql oracle sqlplus procedures

http://shrani.si/f/S/52/2l8ZPmn7/stack.jpg

我在M:1关系中遇到问题。我有名为“zaposleni”(M)的实体和名为“zapori”(1)的实体。当我想执行我的程序时出现问题。错误说我找不到我的父密钥,即使我已经用20个例子填充了我的zapori实体。当我使用“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;    

结束ui;

1 个答案:

答案 0 :(得分:0)

它似乎在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

<强> Results

|  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;

<强> Results

查询3

SELECT * FROM ZAPOSLENI

<强> Results

| 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 |