繁体   English   中英

从T-SQL到Oracle:复杂表列

[英]T-SQL to Oracle: Complicated Table Column

我想将下表转换为PL-SQL。

CREATE TABLE [SchemaName].[TableName] (
    [value]         VARBINARY (2000) NULL,
    [valueAsString] AS               (CONVERT([nvarchar](1000),[value],0))
);

有谁知道如何在PL中重新创建valueAsString伪列吗?

一种可能的解决方案是

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是, utl_raw.cast_to_nvarchar2并不是确定性的,因此需要将其包装到确定性函数中以便在表定义中使用。

但是我不喜欢这样的解决方案。 视图可以解决此问题而无需模式级别的功能。 另外,数据类型建议您在要始终将二进制数据转换为字符串时使用不适当的数据类型存储信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM