Jump to content
php.lv forumi

interbase/firebird un LIMIT


andrisp

Recommended Posts

Ir firebird datubāze <1.0, kurai nav atbalsta SQL LIMIT keywordam.

 

Varbūt varat palīdzēt uzrakstīt procedūru, kas dara to pašu ? Tādu, kurai var padot mainīgo no kura ieraksta sākt atlasīt ierakstus, un cik ierakstus atlasīt. Tipa piem., LIMIT 10,30.

 

Paldies jau iepriekš.

Link to comment
Share on other sites

  • 1 year later...

Lai dabūtu firebirdā limitu tad sintakse tāda

 

SELECT FIRST x [SKIP y] … [rest of query]

 

Piemēram, ja ar mysql tu taisītu šādi:

 

SELECT column1, column2, column3 FROM foo LIMIT 10, 20

 

vai ar PostgreSQL (pretēji mysql):

 

SELECT column1, column2, column3 FROM foo LIMIT 20, 10

 

tad to pašu sql iekš firebird var uzrakstīt lūk tā:

 

SELECT FIRST 10 SKIP 20 column1, column2, column3 FROM foo

 

 

p.s. pats meklēju un atradu to šeit: links

 

gan jau kādam noderēs vēlāk ;)

Link to comment
Share on other sites

Yup, uz jaunajiem Firebird (liekas, ka uz ), kā jau darksing pieminēja:

SELECT FIRST x [SKIP y] … [rest of query]

 

Vai arī

SELECT ...
[ORDER BY <expr_list>]
ROWS <expr1> [TO <expr2>]

 

Uz firebird < 1.0 var mēģināt (čerezŽ) laist caur procedūru:

CREATE PROCEDURE TABLE_LIMITER (start INTEGER, num INTEGER)
RETURNS (id INTEGER, data_field1 VARCHAR(255), data_field2 VARCHAR(255), <utt.>, ...)
AS 
DECLARE VARIABLE c INTEGER;
BEGIN
c = 0;
FOR SELECT id, data_field1, data_field2, <utt.>, ... FROM some_table ORDER BY some_field
	INTO :id, :data_field1, :data_field2, :<utt.>, ...
DO
BEGIN
	IF (c = :start + :num) THEN
		EXIT;
	ELSE
		IF (c >= :start) THEN
			SUSPEND;
	c = c + 1;		  
END
END

 

Totāls čerezžē :))

 

Protams, silti iesaku apgreidoties uz jaunāko (2.1RC2) - daudz stabilāks, visādas jaunas mantiņas un bumbulīši un arī ĀTRĀKS :)

Link to comment
Share on other sites

×
×
  • Create New...