Sql Teradata:如何从数据库表动态创建视图
我使用的是Teradata BTEQ版本15.00。我有以下SQL代码。动态SQL就快到了,但是formet有点不对劲Sql Teradata:如何从数据库表动态创建视图,sql,teradata,dynamic-sql,Sql,Teradata,Dynamic Sql,我使用的是Teradata BTEQ版本15.00。我有以下SQL代码。动态SQL就快到了,但是formet有点不对劲 .Export Report File = CViews.sql .Rtitle '' .Foldline on .Format Off .set heading ''; .set heading off; .set UNDERLINE OFF; .Omit On 4,5 Select CASE When ColNo = 1 THEN 'Replace Vi
.Export Report File = CViews.sql
.Rtitle ''
.Foldline on
.Format Off
.set heading '';
.set heading off;
.set UNDERLINE OFF;
.Omit On 4,5
Select
CASE When ColNo = 1
THEN 'Replace View
$view_db_name.VW_'||Tbl.Tablename||' As locking row for access
Select ('
Else '' END (Title '')
, Cols.Columnname (Title '')
, CASE WHEN RevColNo = 1 THEN ')
From $db_name.'||Tbl.Tablename||';'
Else '' END (Title '')
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId) As ColNo
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId Desc) As RevColNo
From DBC.Tables Tbl
Join DBC.Columns Cols
On Tbl.Databasename = Cols.Databasename
And Tbl.Tablename = Cols.TableName
Where Tbl.Databasename = '$db_name'
And Tbl.Tablekind = 'T'
Order By Tbl.Tablename, ColNo
;
.Export Reset
.Run File CViews.sql
下面是结果,但access的锁定行被切断,因此我在编译SQL时出错
Replace View VIEWS_TEST.VW_LOCATION As loc
ID
LOC_TYPE_ID
NAME
LATITUDE
LONGITUDE
ADDR1
ADDR2
CITY
STATE
COUNTRY
) From TABLES_TEST.LOCATION ;
您可以看到As Loc被切断,因此我得到以下错误:
*** Failure 3707 Syntax error, expected something like a 'SELECT' keyword o
r a 'LOCK' keyword or '(' or a 'TRANSACTIONTIME' keyword between the 'As' key word and the word 'loc'.
Statement# 1, Info =81
*** Total elapsed time was 1 second.
我尝试了不同的方法,试图让它工作,但失败了
有什么建议吗?这是TD 15.00版的工作版本。
.Export Report File = CViews.sql
.set width 200
.Rtitle ''
.Foldline on
.Format Off
.set heading '';
.set heading off;
.set UNDERLINE OFF;
.Omit On 4,5
Select
CASE When ColNo = 1
THEN 'Replace View
$view_db_name.VW_'||Tbl.Tablename||' As locking row for access
Select ('
Else '' END (Title '')
, Cols.Columnname (Title '')
, CASE WHEN RevColNo = 1 THEN ')
From $db_name.'||Tbl.Tablename||';'
Else '' END (Title '')
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId) As ColNo
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId Desc) As RevColNo
From DBC.Tables Tbl
Join DBC.Columns Cols
On Tbl.Databasename = Cols.Databasename
And Tbl.Tablename = Cols.TableName
Where Tbl.Databasename = '$db_name'
And Tbl.Tablekind = 'T'
Order By Tbl.Tablename, ColNo
;
.Export Reset
.Run File CViews.sql
我添加了missing,并更改为dbc.tablesV和dbc.ColumnsV
.os rm CViews.sql
.Export Report File = CViews.sql
.set width 300
.Rtitle ''
.Foldline on
.Format Off
.set heading '';
.set heading off;
.set UNDERLINE OFF;
.Omit On 4,5
Select
CASE When ColNo = 1
THEN 'Replace View
$view_db_name.VW_'||Tbl.Tablename||' As locking row for access
Select '
Else ', ' END (Title '')
, Cols.Columnname (Title '')
, CASE WHEN RevColNo = 1 THEN '
From $db_name.'||Tbl.Tablename||';'
Else '' END (Title '')
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId) As ColNo
, Row_Number () Over(Partition By Tbl.Tablename
Order By Cols.ColumnId Desc) As RevColNo
From DBC.TablesV Tbl
Join DBC.ColumnsV Cols
On Tbl.Databasename = Cols.Databasename
And Tbl.Tablename = Cols.TableName
Where Tbl.Databasename = '$db_name'
And Tbl.Tablekind = 'T'
and Tbl.Tablename not like 'WRK_%'
and Tbl.Tablename not like 'ZZ_%'
Order By Tbl.Tablename, ColNo
;
.Export Reset
.Run File CViews.sql
因为您尚未设置宽度…请尝试将宽度设置为200或其他值。缺少的逗号错误可由其他“,”修复。切换到新的V视图dbc.TablesV和dbc.ColumnsV,旧的视图从TD12开始就不推荐使用,并将删除任何超过30个字符的表/列名。在表/列名中添加双引号以防止失败。我认为这个任务更适合于存储过程而不是BTEQ,它是2015:-。set width 200解决了SQL问题。现在,我将处理SQL中缺少的问题。@Dave请粘贴您现在得到的作为输出的内容。。以便我们可以对其进行改进。@Dave好的,我得到了它…但仅从bteq生成动态视图是很困难的。我的建议是,编写一个shell脚本来处理动态部分。将视图\u TEST.VW\u WRK\u位置替换为访问的loc king行选择ID loc\u类型\u ID名称经纬度ADDR1 ADDR2城市州国家ZIP联系人电话\u SPD传真电子邮件注释默认\u CUR From表2.试验地点;LATITUDE$***Failure 3707语法错误,在单词“LOC\u TYPE\u ID”和“NAME”关键字之间应为“,”。语句1,Info=139***总运行时间为1秒。因此,在列名之间缺少上述输出。我想我可以找到答案,明天发布正确的动态视图。戴夫