Firebird - Novidades da versao 1_5

Top  Previous  Next

 

* Savepoints.

        Added support for explicit savepoint management.

      Syntax:

        SAVEPOINT savepoint_name; (create savepoint)

        ROLLBACK [WORKTO [SAVEPOINT] savepoint_name; (rollback to previously created savepoint)

      Notes:

        Not available in PSQL.

 

New ROWS_AFFECTED system variable (SF #451927).

        Return number of rows affected by the last INSERT/UPDATE/DELETE statement.

      Notes:

        1. Available in PSQL only.

        2For any other statement than INSERT/UPDATE/DELETE, result is always zero.

         

 

New SQLCODE and GDSCODE system variables (SF #547383).

        Provide an access to a code of the catched error within the WHEN-block.

      Notes:

        1. Available in PSQL only.

        2. Makes sense in WHEN-block onlyin other places returns 0 (success).

         

* New NULL order handling.

        Allow user-defined ordering of NULLs.

      Syntax:

        [ORDER BY <order_list>]

        <order_list> = {col | int} [COLLATE collation]

          [ASC[ENDING] | DESC[ENDING]] [NULLS {FIRST | LAST}]

          [, <order_list> ...]

      Note:

        Default behaviour is NULLS LAST.

         

* New RECREATE VIEW statement.

        A shorthand for DROP VIEW / CREATE VIEW couple of statements.

      Syntax:

        RECREATE VIEW name <view_definition>;

         

* New CREATE OR ALTER statement (SF #451935).

        Allow either creating or altering a database object depending on its existance.

      Syntax:

        CREATE OR ALTER name <object_definition>;

      Notes:

        1. Applicable to SPs/triggers only.

        2. The statement has the same meaning as CREATE OR REPLACE one in Oracle.

         

* New COALESCE internal function (SF #451917).

        Allow a column value to be calculated by a number of expressions, the first expression returning a non NULL value is returned as the column value.

      Syntax:

        COALESCE (value {, value} ... )

      Notes:

        1. COALESCE (V1, V2) is equivalent to the following case specification:

             CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

        2. COALESCE (V1, V2, ..., Vn), for n >= 3is equivalent to the following case specification:

             CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END

        3. The function has the same meaning as NVL one in Oracle.

      Example:

        SELECT

          PROJ_NAME AS Projectname,

          COALESCE(e.FULL_NAME, '[> not assigned <]'AS Employeename

        FROM

          PROJECT p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER)

      Contributor(s):

        Arno Brinkman <firebird@abvisie.nl>

 

  * New NULLIF internal function (SF #451917).

        Return a NULL value for a sub-expression if it has a specific value, otherwise return the value of the sub-expression.

      Syntax:

        NULLIF (value, value)

      Note:

        NULLIF (V1, V2) is equivalent to the following case specification:

          CASE WHEN V1 = V2 THEN NULL ELSE V1 END

      Example:

        UPDATE PRODUCTS

          SET STOCK = NULLIF(STOCK, 0)

      Contributor(s):

        Arno Brinkman <firebird@abvisie.nl>

 

  * New CASE internal function (SF #451917).

        Allow the result of a column to be determined by a the results of a case expression.

      Syntax:

        <case_specification> = <simple_case> | <searched_case>

 

        <simple_case> = CASE value <simple_when_clause> ... [ELSE value] END

        <simple_when_clause> = WHEN value THEN value

 

        <searched_case> = CASE <searched_when_clause> ... [ELSE value] END

        <searched_when_clause> = WHEN <search_condition> THEN value

      Note:

        The function has the same meaning as DECODE one in Oracle.

      Examples:

        1. Simple case:

          SELECT

            o.ID,

            o.Description,

            CASE o.Status

              WHEN 1 THEN 'confirmed'

              WHEN 2 THEN 'in production'

              WHEN 3 THEN 'ready'

              WHEN 4 THEN 'shipped'

              ELSE 'unknown status ''' || o.Status || ''''

            END

          FROM

            Orders o

        2. Searched case:

          SELECT

            o.ID,

            o.Description,

            CASE

              WHEN (o.Status IS NULL) THEN 'new'

              WHEN (o.Status = 1) THEN 'confirmed'

              WHEN (o.Status = 3) THEN 'in production'

              WHEN (o.Status = 4) THEN 'ready'

              WHEN (o.Status = 5) THEN 'shipped'

              ELSE 'unknown status ''' || o.Status || ''''

            END

          FROM

           Orders o                        

                 

                 

* Universal triggers (SF #451922).

        Allow one trigger to be fired for a number of action types.

      Syntax:

        CREATE TRIGGER name FOR table

          [ACTIVE | INACTIVE]

          <trigger_action_prefix>

          <trigger_action_suffix> [OR <trigger_action_suffix>] [OR <trigger_action_suffix>]

          [POSITION number]

          AS <trigger_body>

        <trigger_action_prefix> = {BEFORE | AFTER}

        <trigger_action_suffix> = {DELETE | INSERT | UPDATE}

      Example:

        CREATE TRIGGER my_trigger FOR my_table BEFORE INSERT OR UPDATE

          AS BEGIN

            IF (NEW.DOC_ID IS NULL) THEN

              EXCEPTION my_exception;

          END

 

           

* New CONNECTION_ID and TRANSACTION_ID system variables (SF #446238#446243).

        Return appropriate internal identifier stored on the database header page.

      Notes:

        1. Available in SQL/PSQL.

        2. The values are reset after a database is restored.

 

         

* Server-side database aliases (SF #446180).

        Any database can be attached to using an "alias" name instead of its physical pathname.

        The list of known database aliases is stored in aliases.conf file under the server installation root.

      Example:

        alias entry in the configuration file: my_database = d:\dbs\my\database.gdb

        connection string: localhost:my_database

         

         

* New EXECUTE STATEMENT statement (SF #446256).

        Allow execution of dynamic SQL statements in SPs/triggers.

      Syntax:

        EXECUTE VARCHAR value;

      Notes:

        1. Available in PSQL only.

        2. Currently cannot return values, so SELECT statements are not allowed.

        3. Recursion level is limited to 50 (hardcoded).

      Example:

        EXECUTE VARCHAR my_var;