Stored Procedures [dbo].[AL_SAVE_METADATA]
Properties
PropertyValue
ANSI Nulls OnYes
Quoted Identifier OnYes
Parameters
NameData TypeMax Length (Bytes)Direction
@xml_string_idint4
@return_valuevarchar(max)maxOut
@SQL_ERROR_CODEint4Out
@SQL_ERROR_DESCRIPTIONvarchar(max)maxOut
SQL Script
CREATE PROCEDURE [dbo].[AL_SAVE_METADATA]  
   @xml_string_id int,
   @return_value varchar(max)  OUTPUT,
   @SQL_ERROR_CODE int OUTPUT,
   @SQL_ERROR_DESCRIPTION varchar(max)  OUTPUT
WITH EXECUTE AS CALLER
AS    
   /*
   *   Generated by SQL Server Migration Assistant for Oracle.
   *   Contact ora2sql@microsoft.com or visit http://www.microsoft.com/sql/migration for more information.
   */

   BEGIN

      DECLARE
         @xml_string_metadata nvarchar(max),
         @xml_metadata xml,
         @uapmuser nvarchar(255),
         @tableOp varchar(1),
         @tableName varchar(30),
         @tableDesc varchar(255),
         @virtual int,
         @inactive int,
         @extended int,
         @fieldName varchar(30),
         @fieldDesc varchar(255),
         @actualTableName varchar(30),
         @actualFieldName varchar(30),
         @fieldUnique int,
         @fieldRequired int,
         @primaryKey int,
         @foreignKey int,
         @dataType int,
         @dataSize int,
         @cnt int,
         @field_already_exists$exception nvarchar(1000),
         @table_already_exists$exception nvarchar(1000)

      BEGIN TRY

         SET @return_value = NULL
         SET @SQL_ERROR_CODE = NULL
         SET @SQL_ERROR_DESCRIPTION = NULL
         SET @field_already_exists$exception =-20011
         SET @table_already_exists$exception = -20015
         SET @return_value = '<Root />'
         SET @SQL_ERROR_CODE = 0
         SET @SQL_ERROR_DESCRIPTION = NULL
          SET @xml_string_metadata = NULL

         /*select the first record into the clob.*/
         SELECT @xml_string_metadata = ARG_XML_STRING.XML_STRING
         FROM dbo.ARG_XML_STRING
         WHERE ARG_XML_STRING.ID = @xml_string_id AND ARG_XML_STRING.SUB_ID = 0

         DECLARE
            @datarecord$xml_string nvarchar(max)
         DECLARE
             DB_IMPLICIT_CURSOR_FOR_datarecord CURSOR LOCAL FORWARD_ONLY FOR
               SELECT ARG_XML_STRING.XML_STRING
               FROM dbo.ARG_XML_STRING
               WHERE ARG_XML_STRING.ID = @xml_string_id AND ARG_XML_STRING.SUB_ID > 0
               ORDER BY ARG_XML_STRING.SUB_ID ASC

         OPEN DB_IMPLICIT_CURSOR_FOR_datarecord

         /*If the split has resulted in more than one xml just keep on appending the same.*/
         WHILE 1 = 1         
            BEGIN
               FETCH DB_IMPLICIT_CURSOR_FOR_datarecord
                   INTO @datarecord$xml_string
               IF @@FETCH_STATUS = -1
                  BREAK

                SET @xml_string_metadata = @xml_string_metadata + @datarecord$xml_string;
            END

         CLOSE DB_IMPLICIT_CURSOR_FOR_datarecord
         DEALLOCATE DB_IMPLICIT_CURSOR_FOR_datarecord

         SET @xml_metadata = CAST (@xml_metadata AS XML)
         SELECT @uapmuser = @xml_metadata.value('(/MetaOp/@user)[1]','nvarchar(255)');

         DECLARE
            @i$TableDef xml

         DECLARE
                      DB_IMPLICIT_CURSOR_FOR_i CURSOR LOCAL FORWARD_ONLY FOR
                      SELECT T.TableDefs.query('.')
                      FROM   @xml_metadata.nodes('/MetaOp/TableDef') T(TableDefs)

         OPEN DB_IMPLICIT_CURSOR_FOR_i

         WHILE 1 = 1         
            BEGIN
               FETCH DB_IMPLICIT_CURSOR_FOR_i
                   INTO @i$TableDef
               IF @@FETCH_STATUS = -1
                  BREAK
                
                SELECT @tableOp = @i$TableDef.value('(/TableDef/@op)[1]','varchar(1)')     
                SELECT @tableName = @i$TableDef.value('(/TableDef/@name)[1]','varchar(30)')
                SELECT @tableDesc = @i$TableDef.value('(/TableDef/@desc)[1]','varchar(255)')
                SELECT @virtual = @i$TableDef.value('(/TableDef/@virtual)[1]','int')
                SELECT @inactive = @i$TableDef.value('(/TableDef/@inactive)[1]','int')
                SELECT @extended = @i$TableDef.value('(/TableDef/@extended)[1]','int')

               IF @extended IS NULL
                  SET @extended = 0

               IF @virtual IS NULL
                  SET @virtual = 0

               IF @tableOp = 'A'
                  BEGIN

                     SELECT @cnt = count_big(1)
                     FROM dbo.ARG_TABLE_DEF
                     WHERE ARG_TABLE_DEF.TABLE_NAME = @tableName

                     IF @cnt > 0
                        BEGIN
                           DECLARE
                              @db_raise_application_error_message nvarchar(4000)
                           SET @db_raise_application_error_message = 'The table specified already exists in the arg_table_def : ' + ISNULL(@tableName, '')
                           RAISERROR(@db_raise_application_error_message, 16, 12)
                        END

                     /*Add a new table def*/
                     INSERT dbo.ARG_TABLE_DEF(
                        TABLE_NAME,
                        TABLE_DESCRIPTION,
                        DATABASE_NAME,
                        VIRTUAL_TABLE,
                        INACTIVE,
                        CORE,
                        EXTENDED,
                        CREATION_DATE,
                        CREATION_USER,
                        LAST_UPDATE_DATE,
                        LAST_UPDATE_USER,
                        VERSION_NUMBER)
                        VALUES (
                           @tableName,
                           @tableDesc,
                           'mdb',
                           @virtual,
                           @inactive,
                           0,
                           @extended,
                           dbo.CURRENTUTCSECS(),
                           @uapmuser,
                           dbo.CURRENTUTCSECS(),
                           @uapmuser,
                           0)

                     BEGIN
                        DECLARE
                           @j$FieldDef xml

                        DECLARE DB_IMPLICIT_CURSOR_FOR_i CURSOR LOCAL FORWARD_ONLY FOR
                          SELECT T.FieldDefs.query('.')
                          FROM   @i$TableDef.nodes('/TableDef/FieldDef') T(FieldDefs)

                        OPEN DB_IMPLICIT_CURSOR_FOR_j

                        WHILE 1 = 1                        
                           BEGIN
                              FETCH DB_IMPLICIT_CURSOR_FOR_j
                                  INTO @j$FieldDef
                              IF @@FETCH_STATUS = -1
                                 BREAK

                            SELECT @fieldName = @j$FieldDef.value('(/FieldDef/@name)[1]','varchar(30)')
                            SELECT @fieldDesc = @j$FieldDef.value('(/FieldDef/@desc)[1]','varchar(255)')
                            SELECT @actualTableName = @j$FieldDef.value('(/FieldDef/@act_t_name)[1]','varchar(30)')
                            SELECT @actualFieldName = @j$FieldDef.value('(/FieldDef/@act_f_name)[1]','varchar(30)')
                            SELECT @dataSize = @j$FieldDef.value('(/FieldDef/@size)[1]','int')
                            SELECT @dataType = @j$FieldDef.value('(/FieldDef/@type)[1]','int')
                            SELECT @fieldUnique = @j$FieldDef.value('(/FieldDef/@unique)[1]','int')
                            SELECT @fieldRequired = @j$FieldDef.value('(/FieldDef/@required)[1]','int')
                            SELECT @primaryKey = @j$FieldDef.value('(/FieldDef/@primaryKey)[1]','int')
                            SELECT @foreignKey = @j$FieldDef.value('(/FieldDef/@foreignKey)[1]','int')
                            SELECT @inactive = @j$FieldDef.value('(/FieldDef/@inactive)[1]','int')

        
                              SELECT @cnt = count_big(1)
                              FROM dbo.ARG_FIELD_DEF
                              WHERE ARG_FIELD_DEF.TABLE_NAME = @tableName AND ARG_FIELD_DEF.FIELD_NAME = @fieldName

                              IF @cnt > 0
                                 BEGIN
                                    DECLARE
                                       @db_raise_application_error_message$2 nvarchar(4000)
                                    SET @db_raise_application_error_message$2 = 'The field specified already exists in the arg_field_def : ' + ISNULL(@tableName, '') + '|' + ISNULL(@fieldName, '')
                                    RAISERROR(@db_raise_application_error_message$2, 16, 15 )
                                 END

                              INSERT dbo.ARG_FIELD_DEF(
                                 TABLE_NAME,
                                 FIELD_NAME,
                                 ACTUAL_TABLE_NAME,
                                 ACTUAL_FIELD_NAME,
                                 DATA_TYPE,
                                 DATA_SIZE,
                                 FIELD_UNIQUE,
                                 FIELD_REQUIRED,
                                 PRIMARY_KEY,
                                 FOREIGN_KEY,
                                 INACTIVE,
                                 CORE,
                                 CREATION_DATE,
                                 CREATION_USER,
                                 LAST_UPDATE_DATE,
                                 LAST_UPDATE_USER,
                                 VERSION_NUMBER)
                                 VALUES (
                                    @tableName,
                                    @fieldName,
                                    @actualTableName,
                                    @actualFieldName,
                                    @dataType,
                                    @dataSize,
                                    @fieldUnique,
                                    @fieldRequired,
                                    @primaryKey,
                                    @foreignKey,
                                    @inactive,
                                    0,
                                    dbo.CURRENTUTCSECS(),
                                    @uapmuser,
                                    dbo.CURRENTUTCSECS(),
                                    @uapmuser,
                                    0)
                           END

                        CLOSE DB_IMPLICIT_CURSOR_FOR_j
                        DEALLOCATE DB_IMPLICIT_CURSOR_FOR_j
                     END

                     IF @virtual = 0
                        BEGIN
                           /*add stamp fields*/
                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'creation_date',
                                 99,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)

                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'creation_user',
                                 10,
                                 64,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)

                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'last_update_date',
                                 99,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)

                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'last_update_user',
                                 10,
                                 64,
                                 0,
                                 0,
                                 0,
                                 0,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)

                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'version_number',
                                 4,
                                 0,
                                 0,
                                 1,
                                 0,
                                 0,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)

                           INSERT dbo.ARG_FIELD_DEF(
                              TABLE_NAME,
                              FIELD_NAME,
                              DATA_TYPE,
                              DATA_SIZE,
                              FIELD_UNIQUE,
                              FIELD_REQUIRED,
                              PRIMARY_KEY,
                              FOREIGN_KEY,
                              CORE,
                              CREATION_DATE,
                              CREATION_USER,
                              LAST_UPDATE_DATE,
                              LAST_UPDATE_USER,
                              VERSION_NUMBER)
                              VALUES (
                                 @tableName,
                                 'tenant',
                                 9,
                                 16,
                                 0,
                                 0,
                                 0,
                                 1,
                                 0,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 dbo.CURRENTUTCSECS(),
                                 @uapmuser,
                                 0)
                        END
                  END
               ELSE
                  BEGIN
                     IF @tableOp = 'D'
                        BEGIN
                           /*Delete a table def and its field defs*/
                           DELETE dbo.ARG_FIELD_DEF
                           WHERE ARG_FIELD_DEF.TABLE_NAME = @tableName

                           DELETE dbo.ARG_TABLE_DEF
                           WHERE ARG_TABLE_DEF.TABLE_NAME = @tableName
                        END
                  END
            END

         CLOSE DB_IMPLICIT_CURSOR_FOR_i
         DEALLOCATE DB_IMPLICIT_CURSOR_FOR_i

      END TRY

      BEGIN CATCH
        
         DECLARE @ErrorNumber int
         DECLARE @ErrorSeverity int
         DECLARE @ErrorState int
         DECLARE @ErrorMessage nvarchar(max)
         DECLARE @AppErrorCode int

         EXECUTE al_evaluate_error @ErrorNumber OUTPUT, @ErrorSeverity OUTPUT, @ErrorState OUTPUT, @ErrorMessage OUTPUT, @AppErrorCode OUTPUT                       
            
         BEGIN
            SET @SQL_ERROR_CODE = @AppErrorCode
            SET @SQL_ERROR_DESCRIPTION = @ErrorMessage
         END

      END CATCH

   END
GO
Uses