sql >> Databasteknik >  >> RDS >> Oracle

ORACLE:INGA DATA HITTADE -- men data finns

Jag är ganska säker på att jag hittade orsaken till detta beteende:jag gissar att kolumnen faktiskt är av typen CHAR och inte VARCHAR2.

Tänk på följande:

SQL> CREATE TABLE t (a CHAR(10));

Table created.

SQL> INSERT INTO t VALUES ('FUCHSB');

1 row created.

SQL> SELECT * FROM t WHERE a = 'FUCHSB';

A
----------
FUCHSB

SQL> DECLARE
  2    l VARCHAR2(20) := 'FUCHSB';
  3  BEGIN
  4    SELECT a INTO l FROM t WHERE a = l;
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4

Slutsats:

  • När du arbetar med CHAR-datatypen, deklarera dina PL/SQL-variabler som CHAR.
  • När det är möjligt, föredra datatypen VARCHAR2 för tabellkolumndefinition. CHAR-datatypen är bara en uppsvälld VARCHAR2-datatyp och lägger inte till någon funktion över datatypen VARCHAR2 (att förbruka mer utrymme/minne är inte en funktion).


  1. Hur ändrar jag fält i den nya PostgreSQL JSON-datatypen?

  2. SQL Server Performance TOP CPU Query -2

  3. Hur man producerar en csv-utdatafil från lagrad procedur i SQL Server

  4. Hämta kolumndefinition för resultatuppsättning för lagrad procedur