Toon posts:

[Oracle] boolean datatype?

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met het ontwerpen van een programma. Dit werkt al goed op een Access database maar nu wil ik die database converteren naar een Oracle db. Ik ben nu wel op een probleem gestuit ivm het datatype van booleans in oracle. Hiervoor wens ik geen VARCHAR2(1) te gebruiken.
Mijn leerboek ivm Oracle vermeld ook nergens boolean datatypes evenals de gotsearch, en oracle.com.
Google weet mij te vertellen dat Oracle 9i wel boolean support schijnt te hebben maar sommige bronnen ontkennen dit dan weer. Ik draai echter nog 8.1.7.

Kunnen jullie mij soms zeggen hoe ik dit hier het eenvoudigst oplos?

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 00:43

The Eagle

I wear my sunglasses at night

Momentje, ik kijk even in de on line oracle documentatie voor je

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Boolean bestaat niet in Oracle SQL, wel in PL/SQL.
In je tabel moet je dus iets anders gebruiken.

Who is John Galt?


  • Skaah
  • Registratie: Juni 2001
  • Niet online
justmental schreef op 27 januari 2004 @ 11:38:
Boolean bestaat niet in Oracle SQL, wel in PL/SQL.
In je tabel moet je dus iets anders gebruiken.
Meestal toch tinyintnumeric(1) dan? 1 is true, 0 is false. Die evalueren in PHP tenminste naar true en false.

edit:
Tnx, taranis

[ Voor 7% gewijzigd door Skaah op 27-01-2004 11:59 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Boolean bestaat niet in de Sql standaard. Meestal wordt er een numeric(1) voor gebruikt met een constraint dat de waarde 0 of 1 mag zijn.

hou er rekening mee dat ODP.NET, mocht je .NET gebruiken met oracle, numeric(1) ziet als een int16 en je code daar dus ook rekening mee moet houden.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
justmental schreef op 27 januari 2004 @ 11:38:
Boolean bestaat niet in Oracle SQL, wel in PL/SQL.
In je tabel moet je dus iets anders gebruiken.
als ik het goed voorheb dan zit PL/SQL toch standaar ingebakken in oracle rdbms?
Maar mijn voorstel van VARCHAR2(1) zou dus eigenlijk een (slordig) alternatief zijn?

@skaah: volgens mij verwar je met MySQL want voor zover ik weet heeft Oracle helemaal geen tinyInt datatype

[ Voor 14% gewijzigd door Verwijderd op 27-01-2004 11:45 ]


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 00:43

The Eagle

I wear my sunglasses at night

Ok heb ff in de Oracle 8 documentatie gezocht maar staat eigenlijk maar 1 ding in over booleans expressions en dat is dat je er gewoon varchars voor kunt gebruiken. Speciefiek boolean datatype bestaat dus niet.
Ook wel logisch overigens; stel je hebt bij het ontwikkelen van een applicatie in 1e instantie de keuze tusen ja of nee, maar later wil je toevoegen dat ook andere waarden mogelijk zijn. Als je dan boolean gebruikt heb je een probleem - kun je vrijwel de hele applicatie herschrijven overal waar die waarde voorkomt. Gebruik je geen boolean maar gewoon een varchar, dan kun je simpelweg een extra waarde toekennen en die door Oracle laten evalueren (of nog netter, door je progje op de plaats van invoer), maar Oracle ligt er dan niet wakker van dat er een andere waarde dan 0 of 1 in het veld staat.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

justmental schreef op 27 januari 2004 @ 11:38:
Boolean bestaat niet in Oracle SQL, wel in PL/SQL.
In je tabel moet je dus iets anders gebruiken.
Wat is het resultaatdatatype van deze query, trouwens:
SELECT 1=1 FROM dual;

Ik weet het niet, maar in postgres is dat een boolean, in mysql een integer geloof ik en in oracle?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

ACM schreef op 27 januari 2004 @ 12:31:
Wat is het resultaatdatatype van deze query, trouwens:
SELECT 1=1 FROM dual;

Ik weet het niet, maar in postgres is dat een boolean, in mysql een integer geloof ik en in oracle?
code:
1
2
3
4
5
SQL> select 1=1 from dual;
select 1=1 from dual
        *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

Who is John Galt?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

hmm, je kan toch gewoon dat soort queries doen?
de postgresql/mysql variant is select 1=1; ik meende dat je er in oracle dan from dual achter moest plakken.

Magoed, select $field = $field from $tabel moet ook werken en laten zien of het een boolean of integer wordt :P

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

ACM schreef op 27 januari 2004 @ 12:36:
hmm, je kan toch gewoon dat soort queries doen?
Nope, no can do, dat soort dingen moet je bij Oracle met procedurele logica oplossen buiten de SQL.

Who is John Galt?


  • EfBe
  • Registratie: Januari 2000
  • Niet online
ACM schreef op 27 januari 2004 @ 12:36:
hmm, je kan toch gewoon dat soort queries doen?
de postgresql/mysql variant is select 1=1; ik meende dat je er in oracle dan from dual achter moest plakken.
from dual is voor scalar selects die puur met de operands werken en dus geen table source / view source hebben en dan prakken ze er from dual achter voor de compiler ;) (SELECT MySequence.NEXTVAL FROM DUAL bv..)
Magoed, select $field = $field from $tabel moet ook werken en laten zien of het een boolean of integer wordt :P
Nee, want hoe moet hij dat dan afbeelden? De resultset heeft dan een field maar van een onbekend type :) Ik denk dat je het met een UDT moet oplossen.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sja, maar intern werkt het toch wel met de three-valued logic (true/false/null) :?
Of zelfs dat niet, want als je in een query
select * from tabelA, tabelB where tabelA.id = tabelB.id and tabelA.value > tabelB.value
doet heb je ook een tweetal boolean-operaties. Zaten operaties op combinaties van velden eigenlijk in de select eigenlijk in de SQL-spec, 't is niet bijster duidelijk maar lijkt me wel?
Trouwens, BOOLEAN is wel degelijk een datatype dat in SQL99 gedefinieerd is, paragraaf 4.6 van het "SQL Foundation"-deel gaat er over.

Magoed, ik had Oracle, zeker voor Tweakers.net, al tijden geleden afgeschreven :+

Verwijderd

discussie op asktom

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 22:51

JaQ

over het algemeen gebruik ik een char(1) i.c.m. een checkconstraint voor een boolean. Dat is voornamelijk voor mijn eigen leesbaarheid. Een numeric(1) kolom zou net zou goed kunnen en waarschijnlijk ook nog sneller zijn in joins (maar dat zou ik moeten aantonen en aangezien ik geen oracle db onder mijn vingers heb nu, gaat dat even niet).

Let wel even op dat je dus en een check constraint en not null toewijst aan de kolom (je wil geen fuzzy logic of 3-waardige booleans creëeren).

Het heeft trouwens geen nut om een varchar2(1) aan een veld van 1 teken dat verplicht is toe te wijzen. Sterker nog, het is beter om een char te gebruiken in dit geval.

Egoist: A person of low taste, more interested in themselves than in me


  • ahendriks
  • Registratie: Februari 2002
  • Laatst online: 17-04 16:21
ACM schreef op 27 januari 2004 @ 12:31:
[...]
Wat is het resultaatdatatype van deze query, trouwens:
SELECT 1=1 FROM dual;
maak hier maar van:
select decode( 1, 1, 'true', 'false' )
from dual
Dan heb je wat je wilt... je krijgt echter een char (varchar2) terug met de tekst true of false...
Pagina: 1

Let op:
Let op: oud topic! Let dus op op wie je reageert.