Oracle 将长列转换为VARCHAR2到视图中

Oracle 将长列转换为VARCHAR2到视图中,oracle,plsql,view,Oracle,Plsql,View,我正在尝试将一个长列的表转换为VARCHAR2列,并在Oracle 11g中构建一个视图。在SELECT查询中演示了如何执行此操作,但在CREATE或REPLACE FORCE view语句中从未演示过 我可以在我的用户配置文件下创建视图和对象,并已成功运行PL/SQL脚本,该脚本使用以下脚本将长字段转换为VARCHAR: DECLARE LONGCOMMENTS LONG; VAR2 VARCHAR2(4000); BEGIN SELECT PGX.COMMENTS INTO LO

我正在尝试将一个长列的表转换为VARCHAR2列,并在Oracle 11g中构建一个视图。
SELECT
查询中演示了如何执行此操作,但在
CREATE或REPLACE FORCE view
语句中从未演示过

我可以在我的用户配置文件下创建视图和对象,并已成功运行PL/SQL脚本,该脚本使用以下脚本将长字段转换为VARCHAR:

DECLARE
  LONGCOMMENTS LONG;
  VAR2 VARCHAR2(4000);
BEGIN
  SELECT PGX.COMMENTS INTO LONGCOMMENTS FROM USER.PGX 
  WHERE ROWNUM < 100;

  VAR2 := SUBSTR(LONGCOMMENTS, 1, 4000);
  PGX.COMMENTS:=DBMS_OUTPUT.PUT_LINE(VAR2);
END;
声明
长评论;
VAR2 VARCHAR2(4000);
开始
从USER.PGX中将PGX.COMMENTS选择为LONGCOMMENTS
其中ROWNUM<100;
VAR2:=SUBSTR(LONGCOMMENTS,14000);
PGX.COMMENTS:=DBMS\u OUTPUT.PUT\u行(VAR2);
结束;
但是,我找不到将输出存储到视图中的方法。我尝试将上述脚本包装到
创建视图中
,但Oracle无法处理它


有没有关于如何实现这一点的建议?

看看Oracle自己是如何解决这个问题的,因为他们在数据字典中大量使用long

DBA_视图和其他视图一样,包含TEXT(与LONG一样长)列和TEXT_VC(与VARCHAR2一样长)。它基于内部视图INT$DBA\u VIEWS,其中文本\u VC来自函数getlong(1,v.rowid)。DBA_参数显示该函数的参数是操作码和ROWID

一个跟踪(或受启发的v$sql查询)显示与“从视图$where rowid=:1中选择文本”的执行相对应

基本上,它们有一个PL/SQL函数,它将列选择为varchar2变量并返回该变量

如果不想创建独立函数,最新版本的Oracle可以将其作为视图的一部分:

创建或替换视图我的视图作为
具有
函数视图\u文本(i\u名称VARCHAR2)返回VARCHAR2为
v_ret varchar2(32000);
开始
使用i_name在v_ret中立即执行“从用户_视图中选择文本,其中view_name=:name”;
返回substr(v_ret,14000);
结束;
选择视图名称、视图文本(视图名称)视图文本
从用户视图

/
我需要仔细考虑一下,但谢谢!刚刚和我的同事谈过,他说不用担心长文本字段,因为他有另一种解决方法。