web-dev-qa-db-fra.com

Comment insérer NULL dans le champ à ce jour Oracle SQL Developer

CREATE TABLE pledge
(
    pledge_ID            NUMBER NOT NULL ,
    pledge_endDate       DATE NULL ,
    pledge_startDate     DATE NULL  ,
    pledge_amount        DECIMAL(9,2) NULL  CONSTRAINT  Currency_1322638346 CHECK (pledge_amount >= 0),
    artist_userID        NUMBER NOT NULL,
    follower_userID      NUMBER NOT NULL, 
CONSTRAINT  XPKPledge PRIMARY KEY (pledge_ID),
CONSTRAINT gets FOREIGN KEY (artist_userID) REFERENCES ArtistMember (user_ID),
CONSTRAINT makes FOREIGN KEY (follower_userID) REFERENCES FollowerMember (user_ID)
);

Lorsque j'essaie d'insérer une valeur null, l'erreur ci-dessous est générée.

INSERT INTO pledge VALUES(559, 'null','1-FEB-2016', 3850, 85275, 88128);

Error report -
SQL Error: ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error starting at line : 209 in command -
INSERT INTO pledge VALUES(559, 'NULL','1-FEB-2016', 3850, 85275, 88128)
Error at Command Line : 209 Column : 13
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
4
meeshi

Le SQL Error: ORA-00904: : invalid identifier est probablement dû au fait que votre FOREIGN KEYs fait référence à une colonne qui n'existe pas - vérifiez que les noms des colonnes sont épelés correctement et que cela devrait résoudre le problème (votre déclaration CREATE TABLE fonctionnera alors).

CREATE TABLE ArtistMember (
  user_ID INT PRIMARY KEY
);

CREATE TABLE FollowerMember (
  user_ID INT PRIMARY KEY
);

CREATE TABLE pledge (
    pledge_ID            INT CONSTRAINT  XPKPledge PRIMARY KEY,
    pledge_endDate       DATE NULL,
    pledge_startDate     DATE NULL,
    pledge_amount        DECIMAL(9,2) NULL  CONSTRAINT  Currency_1322638346 CHECK (pledge_amount >= 0),
    artist_userID        INT NOT NULL CONSTRAINT gets REFERENCES ArtistMember (user_ID),
    follower_userID      INT NOT NULL CONSTRAINT makes REFERENCES FollowerMember (user_ID)
);

INSERT INTO ArtistMember VALUES ( 85275 );
INSERT INTO FollowerMember VALUES( 88128 );
INSERT INTO pledge VALUES(
  559,
  NULL,              -- Use NULL and not 'NULL'
  DATE '2016-02-01', -- Use a Date literal and not a string literal
  3850,
  85275,
  88128
);

Si vous utilisez simplement la chaîne dans '1-FEB-2016', Oracle tentera implicitement de convertir le littéral de chaîne à l'aide de la fonction TO_DATE() avec le paramètre de session NLS_DATE_FORMAT comme masque de format. Si elles correspondent, cela fonctionnera, mais il s’agit d’une variable client. Il est donc possible de la modifier. La requête sera alors interrompue sans que le code ait changé (ce qui facilitera le débogage). La réponse simple est de vous assurer que vous comparez la valeur de date en utilisant TO_DATE() et en spécifiant le masque de format (comme indiqué dans la requête ci-dessus) ou en utilisant un DATE '2016-02-01' littéral de date ANSI (indépendant des paramètres NLS).

4
MT0

Insérez une chaîne vide '' dans une colonne NUMBER. Oracle insérera NULL

Par exemple, col_2 a le type de données est le champ date ou number(12,0) (n'importe quel type de données quel champ date), instruction SQL définie la valeur NULL pour col_2 comme ceci: 

insert into foo (col_1, col_2) values ('abc', '');

ou 

insert into foo (col_1, col_2) values ('abc', NULL);

(c'est NULL, pas 'NULL' ou "NULL")

0
foobarfuu