SELECT (AS DATASET) |
Top Previous Next |
The SELECT-statement retrieves data from one or more tables in a database.
To loop over a result set without creating a dataset variable, use FOR SELECT.
If your database system supports Common Table Expressions (CTE), you can use these with scripting as well.
Syntax [WITH <cte> [, <ct> ...]] SELECT [<limit clause>] [{ALL | DISTINCT}] <select_list> FROM <table_reference> [, <table_reference> ... ] [WHERE <search_condition>] ... other SQL SELECT-statement clauses ... [ORDER BY <sort_spec> [, <sort_spec> ... ]] {INTO <variable_list> | AS DATASET dataset_name}
You can write additional clauses if your database system supports it, like a WINDOW clause. The script parser parses the statement up to the INTO or AS DATASET clause.
The INTO or AS DATASET are required.
INTO-clauseThe INTO-clause accepts a list of variables, the SELECT should return no row or only one row of data. If no data is returned, the values in the variables won't be modified.
Example In this example, the query fetches data and returns it via the script output parameters to the caller.
execute udsblock returns(o1 integer, ovc1 varchar(20), ovc2 varchar(31)) as begin select rdb$relation_id, rdb$relation_name from rdb$relations where rdb$relation_name = 'RDB$DATABASE' into :o1, :ovc2; /* return to script caller */ end
AS DATASET-clauseThe AS DATASET-clause creates an implicit dataset-typed variable that can be used with the Dataset-namespace functions to retrieve or modify data, or use in memory datasets that can be saved to file.
Example execute udsblock() returns(resultint integer, resultvarchar varchar (2000), resultbool boolean, resultpointer bigint) as begin /* create the data set */ select employeeid, emp_name, salary, bonus_perc from test_data order by employeeid as dataset mydata;
resultbool = Dataset.Locate(mydata, 'employeeid', 539999, 0);
Dataset.Edit(mydata); /* put into edit mode */ Dataset.SetFieldValue(mydata, 'emp_name', 'Harold'); Dataset.Post(mydata); resultvarchar = Dataset.FieldValue(mydata, 'emp_name');
Dataset.Insert(mydata); /* insert new row and put in */ Dataset.SetFieldValue(mydata, 'emp_name', 'Frank'); Dataset.SetFieldValue(mydata, 'employeeid', 49998); Dataset.SetFieldvalue(mydata, 'salary', 100); Dataset.SetFieldValue(mydata, 'bonus_perc', 0); Dataset.Post(mydata); resultvarchar = Dataset.FieldValue(mydata, 'emp_name');
Dataset.Insert(mydata); /* put into edit mode */ Dataset.SetFieldValue(mydata, 'emp_name', 'Cancel this change'); Dataset.SetFieldValue(mydata, 'employeeid', 50000); Dataset.SetFieldvalue(mydata, 'salary', 100); Dataset.SetFieldValue(mydata, 'bonus_perc', 0); Dataset.Cancel(mydata);
Dataset.First(mydata); resultbool = Dataset.Locate(mydata, 'employeeid', 49998, 0); resultint = Dataset.FieldValue(mydata, 'employeeid'); resultvarchar = Dataset.FieldValue(mydata, 'emp_name');
Dataset.First(mydata); resultbool = Dataset.Locate(mydata, 'employeeid', 539999, 0);
Dataset.First(mydata); resultbool = Dataset.Locate(mydata, 'employeeid', 49998, 0); Dataset.Delete(mydata);
Dataset.Close(mydata); end |