преобразуйте VARCHAR2 в LONG, RAW, CLOB и найдите HA SH md5 - PullRequest
0 голосов

Есть таблица A с полями (str1 VARCHAR2(4000 CHAR),str2 VARCHAR2(4000 CHAR))

Есть таблица B с полями (str1 VARCHAR2(4000 CHAR),str2 VARCHAR2(4000 CHAR),hash_code NUMBER)

begin
insert into B(str1,str2,hash_code)
select str1, str2, standart_hash(str1 ||str2,'MD5') as hash_code from A;
commit;
end;

В результате возникает исключение, когда length(str1||str2) длиннее 4000 (varchar2 слишком мал).

Как я могу преобразовать это в другой тип, например clob, в таком выборе? to_clob(str1 || str2) не работает.

и standart_hash не работает с clob,long,raw.

Что можно использовать для решения этой проблемы после решения проблемы с литьем?

1 Ответ

3 голосов
/ 28 мая 2020

Тип данных varchar2 фактически имеет максимальную длину 32 КБ в PL / SQL, а standard_ha sh не имеет ограничений на размер входных данных. Также обратите внимание, что standard_ha sh возвращает тип данных RAW, а не NUMBER, поскольку в вашем примере определен столбец hash_code.

SQL> desc A
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 STR1                           VARCHAR2(4000)
 STR2                           VARCHAR2(4000)

SQL> desc B
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 STR1                           VARCHAR2(4000)
 STR2                           VARCHAR2(4000)
 HASH_VALUE                     RAW(50)

SQL> select length(str1), length(str2) from A;

LENGTH(STR1) LENGTH(STR2)
------------ ------------
        4000         4000
           3            3

SQL> insert into B (str1, str2, hash_value) select str1, str2, standard_hash(str1||str2,'MD5') as hash_value from A;

2 rows created.

SQL> begin
  2  insert into B (str1, str2, hash_value) select str1, str2, standard_hash(str1||str2,'MD5') as hash_value from A;
  3  commit;
  4  end;
  5  /

PL/SQL procedure successfully completed.

Как видите, мне удалось запустить ваш пример без проблем.

...