我想将下表转换为PL-SQL。
CREATE TABLE [SchemaName].[TableName] (
[value] VARBINARY (2000) NULL,
[valueAsString] AS (CONVERT([nvarchar](1000),[value],0))
);
有没有人知道如何在PL中重新创建valueAsString
伪列?
答案 0 :(得分:1)
一种可能的解决方案是
HUSQVIK@hq_pdb_tcp> CREATE OR REPLACE FUNCTION convert_raw_to_nvarchar(bin RAW) RETURN NVARCHAR2 DETERMINISTIC
2 IS
3 BEGIN
4 RETURN utl_raw.cast_to_nvarchar2(bin);
5 END;
6 /
Function created.
HUSQVIK@hq_pdb_tcp> CREATE TABLE SchemaName.TableName (
2 value RAW(2000) NULL,
3 valueAsString AS (convert_raw_to_nvarchar(value))
4 );
Table created.
HUSQVIK@hq_pdb_tcp> insert into tablename (value) values (utl_raw.cast_to_raw(n'123344čřžžýřžý'));
1 row created.
HUSQVIK@hq_pdb_tcp> select * from tablename;
VALUE VALUEASSTRING
------------------------------------------------------------ --------------------
00310032003300330034003400630072007A007A00EC0072007A00EC 123344cržžýržý
如果二进制列的限制是2000字节,则不需要BLOB。
遗憾的是, utl_raw.cast_to_nvarchar2
不是确定性的,因此需要将其包含在确定性函数中以便在表定义中使用。
但我不喜欢这样的解决方案。没有模式级别功能,视图可以解决此问题。此外,当您希望始终将二进制数据转换为字符串时,数据类型建议您使用不适当的数据类型存储信息。