PLS-00201 - identificateur doit être déclaré

J'ai exécuté une PL/SQL script qui a créé le tableau suivant

TABLE_NAME VARCHAR2(30) := 'B2BOWNER.SSC_Page_Map';

J'ai fait une fonction insert pour cette table à l'aide d'arguments

CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
         p_page_id   IN B2BOWNER.SSC_Page_Map.Page_ID_NBR%TYPE, 
         p_page_type IN B2BOWNER.SSC_Page_Map.Page_Type%TYPE, 
         p_page_dcpn IN B2BOWNER.SSC_Page_Map.Page_Dcpn%TYPE)

J'ai été informé que j'avais à déclarer B2BOWNER.SSC_Page_Map avant d'apparaître comme un argument de ma fonction. Pourquoi j'obtiens cette erreur?

MODIFIER: erreur Réelle

Warning: compiled but with compilation errors
Errors for FUNCTION F_SSC_PAGE_MAP_INSERT

LINE/COL ERROR                                                            
-------- -----------------------------------------------------------------
2/48     PLS-00201: identifier 'SSC_PAGE_MAP.PAGE_ID_NBR' must be declared
0/0      PL/SQL: Compilation unit analysis terminated 

EDIT: Complète de la Fonction PL/SQL

RETURN INTEGER
IS
   TABLE_DOES_NOT_EXIST exception;  
   PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942

BEGIN

   INSERT INTO 
       B2BOWNER.SSC_Page_Map VALUES(
           p_page_id, 
           p_page_type, 
           p_page_dcpn);

   RETURN 0;

   EXCEPTION
       WHEN TABLE_DOES_NOT_EXIST THEN
           RETURN -1;
       WHEN DUP_VAL_ON_INDEX THEN
           RETURN -2;
       WHEN INVALID_NUMBER THEN
           RETURN -3;
       WHEN OTHERS THEN
           RETURN -4;
END;

SHOW ERRORS PROCEDURE F_SSC_Page_Map_Insert;

GRANT EXECUTE ON F_SSC_Page_Map_Insert TO B2B_USER_DBROLE; 
RETURN INTEGER

EDIT: - je changer les arguments et a reçu un nouveau message d'erreur lié à la commande insert

CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
                            p_page_id   IN INTEGER, 
                            p_page_type IN VARCHAR2, 
                            p_page_dcpn IN VARCHAR2)

RETURN INTEGER
IS

TABLE_DOES_NOT_EXIST exception;  
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942

BEGIN

INSERT INTO 
    B2BOWNER.SSC_Page_Map VALUES(
        p_page_id, 
        p_page_type, 
        p_page_dcpn);

L'erreur

Errors for FUNCTION F_SSC_PAGE_MAP_INSERT

LINE/COL ERROR                                                            
-------- -----------------------------------------------------------------
17/18    PL/SQL: ORA-00942: table or view does not exist                  
16/5     PL/SQL: SQL Statement ignored                                    

Tables a été vérifiée dans le schéma correct et avec les bons noms d'attributs et de types

EDIT: j'ai exécuté la commande suivante pour vérifier si j'ai accès

DECLARE
    count_this INTEGER;

BEGIN

select count(*) into count_this 
from all_tables 
where owner = 'B2BOWNER' 
and table_name = 'SSC_PAGE_MAP';

DBMS_OUTPUT.PUT_LINE(count_this);

END;

La sortie, j'ai reçu est

1
PL/SQL procedure successfully completed.

J'ai accès à la table.

EDIT:

Donc j'ai enfin procédé à une insertion dans la table via le schéma à l'aide de PL/SQL et il a bien fonctionné. Il apparaît que je n'ai tout simplement pas le pouvoir de créer des fonctions, mais c'est une hypothèse.

EDIT:

Table réelle instruction DDL

 v_create := 'CREATE TABLE ' ||  TABLE_NAME || ' (
                PAGE_ID_NBR   NUMERIC(10)   NOT NULL Check(Page_ID_NBR > 0),
                PAGE_TYPE     VARCHAR2(50)  NOT NULL, 
                PAGE_DCPN     VARCHAR2(100) NOT NULL,
                PRIMARY KEY(Page_ID_NBR, Page_Type))';

EXECUTE IMMEDIATE v_create; 

COMMIT WORK;

COMMIT COMMENT 'Create Table'; 
  • Vous n'avez pas compris tout code qui serait la cause de cette erreur. De ce fait, il est assez difficile de déterminer pourquoi vous pourriez avoir causé l'erreur. Pouvez-vous aussi s'il vous plaît poster l'erreur plutôt que de votre interprétation de celle-ci?
  • Comme vous pouvez le voir dans la posté erreur c'est en effet un réel problème
  • Je n'ai jamais contesté le fait que vous aviez un problème @Molles, c'est juste que tu ne donnes pas assez d'informations pour résoudre le problème. L'erreur que vous avez posté est différente de celle indiquée.. il déclare qu'il n'existe aucun identifiant SSC_PAGE_MAP.PAGE_ID_NBR. Avez-vous validé le fait que la colonne PAGE_ID_NBR sur la table SSC_PAGE_MAP dans le schéma " B2BOWNER` existe et que vous avez la possibilité de SÉLECTIONNER à partir de ce tableau dans le schéma que vous êtes la création de cette fonction?
  • Oui, le tableau vérifiée comme existant en vertu de schéma, peut être la cible d'une instruction DDL et les attributs d'une telle table sont vérifiées et match argument de la fonction des noms. La seule chose que je peux penser est que si en quelque sorte de la casse a jeté cela, mais j'en doute.
  • Voulez-vous dire une instruction DML plutôt que de DDL @Boueuse?
  • Eh bien oui, @Ben une instruction DML tels que SÉLECTIONNEZ
  • Votre dernière modification indique que vous n'avez pas accès à la table. Vous pouvez poster indiquer quel est le résultat de select count(*) from all_tables where owner = 'B2BOWNER' and table_name = 'SSC_PAGE_MAP' est? Pouvez-vous vous connecter sur le schéma B2BOWNER et grant insert on ssc_page_map to <the schema your function is in>?
  • Essayez SELECT * FROM ALL_TAB_COLUMNS WHERE OWNER='B2BOWNER' AND TABLE_NAME='SSC_PAGE_MAP'. Ce que les noms de colonne sont-ils de retour?
  • Je ne sais pas comment ouvrir une session dans le schéma et effectuer une telle subvention. Je dois obtenir avec les Administrateurs de bases de données sur que si vous pouvez expliquer comment. Je suis à l'aide de TOAD pour Oracle.
  • lorsque j'ai exécuté la requête, j'ai reçu un Error at line 1 ORA-06550: line 13, column 31: PL/SQL: ORA-00947: not enough values ORA-06550: line 13, column 5: PL/SQL: SQL Statement ignored Script Terminated on line 1.
  • Il n'y a pas de différence entre la requête que j'ai posté et celui @Bob.... c'est une étrange erreur à arriver sur une instruction SELECT... je doute que c'est ce que vous avez fait. Si l'une ou l'autre je ou Bob posté retourne 0 lignes, alors vous devez accorder les privilèges appropriés. À en juger par la façon dont cela se passe, je soupçonne fortement que ce soit le cas. De toute façon, vous allez probablement avoir à en parler à vos Administrateurs de bases de données...
  • Pour l'erreur d'origine il semble juste comme le nom de la colonne qui est faux, comme l'a déjà suggéré - de l'argument de la fonction des noms, qui vous dit correspondent les colonnes de la table, peut-être le _nbr partie ne devrait pas être là pour le %type, mais seulement vous pouvez interroger le dictionnaire de données à voir. Pour la seconde erreur, il semble que vous disposez des privilèges sur la table accordés par l'intermédiaire d'un rôle, plutôt que directement à votre look jusqu' authid dans le PL/SQL manuel.
  • Non, la table d'attributs ont été vérifié et revérifié. Tout est en ordre. Il peut être comme vous l'avez dit et je vais avoir besoin de contacter les Administrateurs de bases de données pour les avoir à m'accorder les autorisations appropriées.
  • Ce n'est pas un secret et, puisque vous l'avez demandé, j'ai compris. Ils ont utilisé pour être mélangé mais ma DB IDE (CRAPAUD) ignore la casse et montre tout ce que tous les bouchons. Je n'ai jamais la tête de la casse d'être un problème pour un tableau.

InformationsquelleAutor Mushy | 2014-05-07