Переключение на Oracle с SQL Server. Как связать строку с переменной внутри цикла? В SQL Server я бы написал что-то вродеOracle эквивалент T-SQL SET @var = @var + '';
DECLARE @var varchar(max);
WHILE ([I'm doing something or whatever on a table])
BEGIN
SET @var = @var + ' additional text';
END
SELECT @var AS 'result';
Это то, что я имею в Oracle до сих пор в своей хранимой процедуре. (Переход к эволюционирует к автогеном для ClassMap файлов для NHibernate)
CREATE OR REPLACE PROCEDURE WWNA.UT_MAPPINGHELPER
(
TABLE_NAME IN ALL_TABLES.TABLE_NAME%TYPE
, OWNER_NAME IN ALL_TABLES.OWNER%TYPE
, CLASS_DEFINITION IN OUT VARCHAR2
)
IS
CURSOR TABLE_INFO_CUR
IS
SELECT
T.TABLE_NAME
, C.COLUMN_NAME
,C.DATA_TYPE
,C.DATA_LENGTH
,C.DATA_PRECISION
,C.NULLABLE
FROM
ALL_TABLES T
JOIN
ALL_TAB_COLUMNS C
ON T.TABLE_NAME = C.TABLE_NAME
AND T.OWNER = C.OWNER
WHERE
T.TABLE_NAME = :TABLE_NAME
AND T.OWNER = :OWNER_NAME;
TABLE_INFO_ROW TABLE_INFO_CUR%ROWTYPE;
build_sql varchar2;
BEGIN
--VARIABLE build_sql varchar2(4000);
:build_sql := '';
OPEN TABLE_INFO_CUR;
LOOP
FETCH TABLE_INFO_CUR INTO TABLE_INFO_ROW;
EXIT WHEN TABLE_INFO_CUR%NOTFOUND;
SELECT (:build_sql || ' ' || TABLE_INFO_ROW.TABLE_NAME || ' ' || TABLE_INFO_ROW.COLUMN_NAME || ' ' || TABLE_INFO_ROW.DATA_TYPE) INTO :build_sql;
END LOOP;
:CLASS_DEFINITION := :build_sql;
--DBMS_OUTPUT.put_line (CLASS_DEFINITION);
END;
Благодарности
ЧТО ТАКОЕ ВСЕ ДОВОДЫ ПЕРЕД переменными? Не думайте, что вам это нужно. Во всяком случае, вы уже используете оператор concat, ||, поэтому для переменной x будет «x: = x ||;» –
OldProgrammer