Pervasive-Oracle
相互運用環境
概要
小企業から、企業の各部門、あるいは大企業まで、コンピューティング環境全体にアプリケー ションを配布する作業は、現在の企業において最も重大な課題の 1 つになっています。 Pervasive Software は、この課題を解決するソリューション Pervasive-Oracle 相互運用環境を 考案しました。この強力な開発/実行環境によって、アプリケーションを開発した後、Pervasive および Oracle の両データベース製品全体に柔軟かつ透過的にアプリケーションを設置でき ます。 この結果、単一のアプリケーションで、非常に小さな企業あるいはワークグループから、企業 部門、そして大企業全体にまで対応する、シームレスなスケーラビリティを持つことが可能に なります。Pervasive-Oracle 相互運用環境では、あらゆる組織で、業務に不可欠なアプリケー ションを今までにないレベルで簡単かつ柔軟に設置できます。
はじめに
小企業、企業の各部門、大企業のソリューション
今日のコンピューティング環境は、その規模と複雑さにおいて、非常に多様化しています。同 様に、小企業や企業の各部門、大企業全体のいずれの場合でも、非常に多様なアプリケーショ ンを設置することが少なくありません。一例として、小企業や企業部門では通常、パッケージ 化したアプリケーション、つまりインストール時に使用が想定され、カスタマイズがほとんど あるいはまったく必要とされないアプリケーションセットを採用しています。大企業では非常 に洗練された技術サポート機能を持つことが多いため、カスタマイズは現実的なものであり、 広範囲に行われています。小企業では存在しない機能でも、大企業では必須要件として捉えら れることもあり得ます。 独立ソフトウェア ベンダー(ISV)と、独自のソフトウェアを開発する企業にとって、課題 は明確です。異種環境全体でアプリケーションを低コストで効率的に設置する手段が求められ ています。 Pervasive-Oracle 相互運用環境は、この難問に対する真のソリューションを業界で初めて提供 します。ここでいう環境とは、アプリケーションの開発および配置の仕様であり、この仕様に 従うことによって、Pervasive.SQL および Oracle の両インストール全体でアプリケーション を設置することが可能になります。スケーラビリティの必要性
多くの要因によって、アプリケーションのスケーラビリティが実行要件となり、競争上の優位 をもたらします。特に、以下のことを考慮することが重要です。 • 企業は、各部門および企業全体で設置可能なパッケージ化したアプリケーションを必要と します。 • 拡大する部門および企業は、将来のリソース要求の計画を立てておく必要があります。Pervasive-Oracle 相互運用環境
Pervasive-Oracle 相互運用環境では、Pervasive.SQL と Oracle の製品ライン間でのアプリケー ションの可搬性を提供するための標準ベースの機構を定義しています。この機構は、以下の要 素に基づきます。
• データベース接続のための Open Database Connectivity(ODBC)標準
• 標準ベースの SQL 言語方言 ODBC 仕様内の互換性はかなり大きなものですが、異なる ODBC ベンダーの実装間には相互 運用性の問題が一般的に存在します。この開発環境固有の利点の 1 つに、サポートされる API と SQL 言語方言、そしてサポートされない API と SQL 言語方言が正確に特定される ことがあります。これによって、開発者は Pervasive および Oracle の両環境で真に透過的に 実行可能な製品を開発できます。
標準に基づいた ODBC 接続
ODBC 仕様のバージョン 2.5 は広く採用されているため、Pervasive-Oracle 相互運用環境では この ODBC 仕様を使用しています。Core および Level 1 機能のすべてをサポートし、Level 2 機能の大半をサポートしています。付録 A「サポートされる ODBC API」では、サポートさ れる API の全リストを示します。認証される SQL 言語方言証
Pervasive-Oracle 相互運用環境では、ANSI 92 SQL 標準のかなりの部分を使用します。ODBC バージョン 2.5 仕様では、SQL 構文準拠レベルとして Minimum、Core、Extended の 3 つを 指定しています。Pervasive-Oracle 相互運用環境では、Minimum レベルの SQL 構文をサポー トするとともに、多数の Core および Extended レベルの構文をサポートします。付録 B「サ ポートされる SQL 構文」では、サポートされる全 SQL 構文を示します。
認証される SQL データ型
ODBC バージョン 2.5 仕様では、データ型の標準セットを記述します。付録 C「サポートさ れる SQL データ型」では、サポートされる全データ型と、その精度およびサイズを示します。将来の拡張
Pervasive-Oracle 相互運用環境は、今回初めてリリースされたものです。このリリースでは、 将来の拡張に向けた標準に基づく基盤を提供しています。将来のリリースでは、この相互運用 環境はさらに強化され、Pervasive および Oracle の両データベース環境で透過的に機能するモ ジュール化したソフトウェア コンポーネントが追加される予定です。 この「ビジネス オブジェクト」は、開発コストをさらに低下させる優れた再使用可能なコン ポーネントになるはずです。 Pervasive-Oracle 相互運用環境の将来のリリースでは、コンピューティング環境のあらゆる領 域で簡単に設置可能なモジュール化したソフトウェア アプリケーション構造へと強化される ことになるでしょう。付録 A - ODBC API サポート
以下に、Pervasive-Oracle 相互運用環境でサポートされる ODBC API を示します。ここで 示す準拠レベルは、Microsoft ODBC バージョン 2.5 仕様を基準にしたものです。 ODBC 関数 準拠レベル SQLAllocConnect Core SQLAllocEnv Core SQLAllocStmt Core SQLBindCol Core SQLBindParameter Level 1 SQLBrowseConnect Level 2 SQLCancel Core SQLColAttributes Core SQLColumns Level 1 SQLColumnPrivileges Level 2 SQLConnect Core SQLDataSources Level 2 SQLDescribeCol Core SQLDescribeParam Level 2 SQLDisconnect Core SQLDriverConnect Level 1 SQLDriversd Level 2 SQLError Core SQLExecDirect Core SQLExecute Core SQLFetch Core SQLForeignKeys Level 2 SQLFreeConnect Core SQLFreeEnv Core SQLFreeStmt Core SQLGetConnectOption Level 1 SQLGetCursorName Core SQLGetData Level 1 SQLGetFunctions Level 1 SQLGetInfo Level 1 SQLGetStmtOption Level 1 SQLGetTypeInfo Level 1 SQLMoreResults Level 2 SQLNativeSql Level 2 SQLNumResultCols Core SQLNumParams Level 2 SQLParamData Level 1 SQLPrepare Core SQLPrimaryKeys Level 2 SQLProcedures Level 2 SQLProcedureColumns Level 2 SQLPutData Level 1
SQLRowCount Core SQLSetConnectOption Level 1 SQLSetCursorName Core SQLSetStmtOption Level 1 SQLSpecialColumns Level 1 SQLStatistics Level 1 SQLTables Level 1 SQLTablePrivileges Level 2 SQLTransact Core
付録 B - SQL 構文のサポート
以下に、Pervasive-Oracle 相互運用環境でサポートされる SQL 構文の概要を示します。全構 文の詳細なドキュメントは、このホワイト ペーパーの付録 E に掲載しています。 以下の表では、SQL コマンドを次の 3 つのカテゴリに分類し、その機能の概要を示します。 • データ定義言語(DDL)コマンド • データ操作言語(DML)コマンド • トランザクション制御コマンドデータ定義言語(DDL)コマンド
データ定義言語(DDL)コマンドでは、以下の処理を実行できます。 • スキーマ オブジェクトの作成、変更、ドロップ • 権限と役割の供与と取り消し 以下の DDL コマンドはサポートされますが、基になるデータベース エンジンの管理面の差 異に起因する制限が存在します。 データ定義言語コマンド ALTER TABLE CREATE INDEX CREATE TABLE CREATE VIEW DROP INDEX DROP TABLE DROP VIEW CREATE PROCEDURE. CREATE TRIGGER DROP PROCEDURE DROP TRIGGER GRANT REVOKEデータ操作言語(DML)コマンド
データ操作言語(DML)コマンドは、既存のスキーマ オブジェクト内のデータを問い合わせ て操作します。これらのコマンドは、現在のトランザクションを暗黙にコミットしません。 以下の DML コマンドがサポートされます。 サポートされる DML コマンド DELETE INSERT SELECT UPDATEトランザクション制御コマンド
トランザクション制御コマンドは、アプリケーション トランザクションの実行を管理します。 さらに、トランザクションの失敗処理と復旧処理を管理します。 以下のトランザクション制御コマンドがサポートされます。 サポートされるトランザクション制御 構文 COMMIT ROLLBACK SAVEPOINT付録 C - データ型のサポート
以下に、Pervasive-Oracle 相互運用環境でサポートされるデータ型を示します。 データ型(数値) 精度/サイズ SQL_BIT 1 SQL_TINYINT - signed 3 SQL_TINYINT - unsigned 3 SQL_SMALLINT - signed 5 SQL_SMALLINT - unsigned 5 SQL_INTEGER - signed 10 SQL_INTEGER - unsigned 10 SQL_BIGINT - signed 19 SQL_BIGINT - unsigned 20 SQL_DECIMAL 64 SQL_BINARY 255 SQL_VARBINARY 254 SQL_LONGVARBINARY 20 億(∼2G) SQL_FLOAT 7 SQL_REAL 7 SQL_DOUBLE 15 SQL_DATE 10 SQL_TIME 8 SQL_TIMESTAMP 19 SQL_CHAR 255 SQL_VARCHAR 254 SQL_LONGVARCHAR 20 億(∼2G)付録 D - スカラ関数のサポート
以下に、Pervasive-Oracle 相互運用環境でサポートされ、ODBC でアクセス可能なスカラ 関数の最小限のリストを示します。Pervasive-Oracle 相互運用環境が配布される前に、さら に使用可能な関数が追加され、ドキュメント化される予定です。スカラ関数のサポート 数値型 MOD 文字列型 CONCAT LCASE LENGTH LTRIM RTRIM SUBSTRING UCASE タイムスタンプ CURRENT_TIMESTAMP(拡張) 時間 CURTIME システム関数 DATABASE(拡張) IF(拡張) NULL(拡張) USER(拡張) DBNAME USERNAME データ変換 CONVERT
付録 E - Oracle-Pervasive SQL 構文定義の詳細
SQL 構文
ALTER TABLE
ALTER TABLE table-name alter-option-list table-name ::= user-defined-name
alter-option-list ::= alter-option
| ( alter-option [ , alter-option ]… ) alter-option ::= ADD column -definition
| ADD table-constraint-definition
| DROP CONSTRAINT constraint-name [ CASCADE ] | DROP PRIMARY KEY [ CASCADE ]
column -definition ::= column -name data-type [ DEFAULT default-value ] [ column -constraint [ column -constraint ]… ]
data-type ::= data-type-name [ ( precision [ , scale ] ) ] data-type-name ::= 付録 C のリストを参照 precision ::= integer
scale ::= integer default-value ::= literal
column -constraint ::= [ CONSTRAINT constraint-name ] col-constraint constraint-name ::= user-defined-name
col-constraint ::= NOT NULL | UNIQUE | PRIMARY KEY
| REFERENCES table-name [ ( column -name ) ] [ referential-actions ] referential-actions ::= referential-delete-action
referential-delete-action ::= ON DELETE CASCADE
table-constraint-definition ::= [ CONSTRAINT constraint-name ] table-constraint table-constraint ::= UNIQUE ( column -name [ , column -name ]… )
| PRIMARY KEY ( column -name [ , column -name ]… ) | FOREIGN KEY ( column -name [ , column -name ] )
REFERENCES table-name [ ( column -name [ , column -name ]… ) ] [ referential-actions ]
COMMIT
COMMIT [ WORK ]
CREATE INDEX
CREATE [ UNIQUE ] INDEX index-name ON table-name ( column -name [ ASC | DESC ]
[ , column -name [ ASC | DESC ] ]…) index-name ::= user-defined-name
CREATE PROCEDURE
CREATE PROCEDURE procedure-name ( parameter [ , parameter ]… ) start-proc-stmt
proc-stmt
procedure-name ::= user-defined-name
parameter ::= parameter-name [ IN | OUT | IN_OUT ] data-type parameter-name ::= user-defined-name
proc-expr ::= 通常の式と同じですが、IF 式あるいは ODBC スタイルのスカラ関数は許容さ れません
start_proc_stmt ::= AS
proc- stmt ::= compound-statement
| CALL procedure-name ( proc-expr [ , proc-expr ]… )
| CASE proc-expr WHEN proc-expr THEN proc-stmt [ ; proc-stmt ]… [ WHEN proc-expr THEN proc-stmt [ ; proc-stmt ]… ]… END CASE | CASE WHEN proc-search-condition THEN proc-stmt [ ; proc-stmt ]… [ WHEN proc-search-condition THEN proc-stmt [ ; proc-stmt ]… ]… END CASE
| cursor-statement
| DECLARE variable-name data-type [ DEFAULT proc-expr ] | delete-statement
| IF proc-search-condition THEN proc-stmt [ ; proc-stmt ]… [ ELSE proc-stmt [ ; proc-stmt ]… ] END IF
| insert-statement | loop-statement | RETURN [ proc-expr ] | transaction-statement | select-statement-with-into | select-statement | assignment-statement | update-statement
compound-statement ::= [ label-name : ] BEGIN [ ATOMIC ]
[ proc-stmt [ ; proc-stmt ]… ] END [ label-name ] label-name ::= user-defined-name
cursor-name ::= user-defined-name variable-name ::= user-defined-name
proc-search-condition ::= 通常の search-condition と同じですが、サブクエリを含む式は許容さ れません
assignment-statement ::= SET variable-name = proc-expr cursor-statement ::= CLOSE cursor-name
| DECLARE cursor-name CURSOR FOR select-statement [ FOR UPDATE | FOR READ ONLY ]
| DELETE WHERE CURRENT OF cursor-name | FETCH cursor-name
[ INTO variable-name [ , variable-name ]… ] | OPEN cursor-name
| UPDATE
SET column -name = proc-expr [ , column -name = proc-expr ]… WHERE CURRENT OF cursor-name
loop-statement ::= [ label-name : ] LOOP proc-stmt [ ; proc-stmt ]… END LOOP [ label-name ] | [ label-name : ] WHILE proc-search-condition
select-statement-with-into ::= SELECT [ ALL | DISTINCT ] select-list INTO variable-name [ , variable-name ]… FROM table-reference [ , table-reference ]… [ WHERE search-condition ]
[ GROUP BY expression [ , expression ]… [ HAVING search-condition ] ]
CREATE TABLE
CREATE TABLE table-name ( table-element [ , table-element ]… ) table-element ::= column -definition | table-constraint-definition
CREATE TRIGGER
CREATE TRIGGER trigger-name before-or-after ins-upd-del ON table-name [ REFERENCING referencing-alias ] FOR EACH ROW
[ WHEN proc-search-condition ] proc-stmt trigger-name ::= user-defined-name
before-or-after ::= BEFORE | AFTER ins-upd-del ::= INSERT | UPDATE | DELETE
referencing-alias ::= OLD [ AS ] correlation-name [ NEW [ AS ] correlation-name ] | NEW [ AS ] correlation-name [ OLD [ AS ] correlation-name ] correlation-name ::= user-defined-name
CREATE VIEW
CREATE VIEW view-name [ ( column -name [ , column -name ]…) ] AS query-specification view-name ::= user-defined-name
DELETE
DELETE FROM table-name [ WHERE search-condition ]
DROP INDEX
DROP INDEX [ table-name . ] index-name
DROP PROCEDURE
DROP PROCEDURE procedure-name
DROP TABLE
DROP TRIGGER
DROP TRIGGER trigger-name
DROP VIEW
DROP VIEW view-name
GRANT
GRANT CREATETAB TO public-or-user-group-name [ , public-or-user-group-name ]… GRANT table-privilege ON table-name TO user-or-group-name [ , user-or-group-name ]… table-privilege ::= ALL
| SELECT [ ( column -name [ , column -name ]… ) ] | UPDATE [ ( column -name [ , column -name ]… ) ] | INSERT
| DELETE | ALTER | REFERENCES
public-or-user-group-name ::= PUBLIC | user-group-name user-group-name ::= user-name | group-name
user-name ::= user-defined-name
INSERT
INSERT INTO table-name [ ( column -name [ , column -name ]…) ] insert-values insert-values ::= VALUES ( expression [ , expression ]… )
| query-specification
ROLLBACK
ROLLBACK [ WORK ] [ TO SAVEPOINT savepoint-name ]
SAVEPOINT
SAVEPOINT savepoint-name
SELECT
query-specification [ [ UNION [ ALL ] query-specification ]… [ ORDER BY order-by-expression [ , order-by-expression ]… ] order-by-expression ::= expression [ ASC | DESC ]
query-specification ::= ( query-specification )
| SELECT [ ALL | DISTINCT ] select-list. FROM table-reference [ , table-reference ]… [ WHERE search-condition ]
[ GROUP BY expression [ , expression ]… [ HAVING search-condition ] ] select-list ::= * | select-item [ , select-item ]…
select-item ::= expression [ [ AS ] alias-name ] | table-name . * table-reference ::= table-name [ [ AS ] alias-name ]
search-condition ::= search-condition AND search-condition | search-condition OR search-condition | NOT search-condition
| ( search-condition ) | predicate
predicate ::= expression [ NOT ] BETWEEN expression AND expression | expression comparison-operator expression-or-subquery | expression [ NOT ] IN ( query-specification )
| expression [ NOT ] IN ( value [ , value ]… ) | expression [ NOT ] LIKE value
| expression IS [ NOT ] NULL
| expression comparison-operator ANY ( query-specification ) | expression comparison-operator ALL ( query-specification ) | expression comparison-operator SOME ( query-specification ) | EXISTS ( query-specification )
comparison-operator ::= < | > | <= | >= | = | <>
expression-or-subquery ::= expression | ( query-specification ) value ::= literal | USER | ?
expression ::= expression – expression | expression + expression | expression * expression | expression / expression | ( expression ) | -expression | +expression | column -name | ? | literal | set-function | scalar-function | { fn scalar-function } | : user-defined-name set-function ::= COUNT (*) | COUNT ( expression ) | SUM ( [ ALL ] expression ) | AVG ( [ ALL ] expression ) | MIN ( [ ALL ] expression ) | MAX ( [ ALL ] expression )
scalar-function ::= 付録 D のリストを参照
UPDATE
UPDATE table-name SET column -name = expression [ , column -name = expression ]… [ WHERE search-condition ]
構文要素の定義
以下に、上記の構文の記述で使用した要素の定義をアルファベット順に示します。
alter-option ::= ADD column -definition
| ADD table-constraint-definition
| DROP CONSTRAINT constraint-name [ CASCADE ] | DROP PRIMARY KEY [ CASCADE ]
alter-option-list ::= alter-option
| ( alter-option [ , alter-option ]… ) assignment-statement ::= SET variable-name = proc-expr before-or-after ::= BEFORE | AFTER
col-constraint ::= NOT NULL | UNIQUE | PRIMARY KEY
| REFERENCES table-name [ ( column -name ) ] [ referential-actions ] column -constraint ::= [ CONSTRAINT constraint-name ] col-constraint
column -definition ::= column -name data-type [ DEFAULT default-value ] [ column -constraint [ column -constraint ]… ]
column -name ::= user-defined-name comparison-operator ::= < | > | <= | >= | = | <>
compound-statement ::= [ label-name : ] BEGIN [ ATOMIC ]
[ proc-stmt [ ; proc-stmt ]… ] END [ label-name ] constraint-name ::= user-defined-name
correlation-name ::= user-defined-name cursor-name ::= user-defined-name
cursor-statement ::= CLOSE cursor-name
| DECLARE cursor-name CURSOR FOR select-statement [ FOR UPDATE | FOR READ ONLY ]
| DELETE WHERE CURRENT OF cursor-name | FETCH cursor-name
[ INTO variable-name [ , variable-name ]… ] | OPEN cursor-name
| UPDATE
SET column -name = proc-expr [ , column -name = proc-expr ]… WHERE CURRENT OF cursor-name
data-type ::= data-type-name [ ( precision [ , scale ] ) ] data-type-name ::= 付録 C のリストを参照 default-value ::= literal
expression ::= expression – expression | expression + expression | expression * expression | expression / expression | ( expression ) | -expression | +expression | column -name | ? | literal | set-function | scalar-function | { fn scalar-function } | : user-defined-name
expression-or-subquery ::= expression | ( query-specification ) index-name ::= user-defined-name
ins-upd-del ::= INSERT | UPDATE | DELETE
insert-values ::= VALUES ( expression [ , expression ]… ) | query-specification
label-name ::= user-defined-name
loop-statement ::= [ label-name : ] LOOP proc-stmt [ ; proc-stmt ]… END LOOP [ label-name ] | [ label-name : ] WHILE proc-search-condition
DO [ proc-stmt [ ; proc-stmt ] ]… END WHILE [ label-name ] order-by-expression ::= expression [ ASC | DESC ]
parameter ::= parameter-name [ IN | OUT | IN_OUT ] data-type parameter-name ::= user-defined-name
precision ::= integer
predicate ::= expression [ NOT ] BETWEEN expression AND expression | expression comparison-operator expression-or-subquery | expression [ NOT ] IN ( query-specification )
| expression [ NOT ] IN ( value [ , value ]… ) | expression [ NOT ] LIKE value
| expression IS [ NOT ] NULL.
| expression comparison-operator ANY ( query-specification ) | expression comparison-operator ALL ( query-specification ) | expression comparison-operator SOME ( query-specification ) | EXISTS ( query-specification )
proc-expr ::= 通常の式と同じですが、IF 式あるいは ODBC スタイルのスカラ関数は許容さ れません
proc-search-condition ::= 通常の search-condition と同じですが、サブクエリを含む式は許容さ れません
proc- stmt ::= compound-statement
| CALL procedure-name ( proc-expr [ , proc-expr ]… )
| CASE proc-expr WHEN proc-expr THEN proc-stmt [ ; proc-stmt ]… [ WHEN proc-expr THEN proc-stmt [ ; proc-stmt ]… ]… END CASE | CASE WHEN proc-search-condition THEN proc-stmt [ ; proc-stmt ]… [ WHEN proc-search-condition THEN proc-stmt [ ; proc-stmt ]… ]… END CASE
| cursor-statement
| DECLARE variable-name data-type [ DEFAULT proc-expr ] | delete-statement
| IF proc-search-condition THEN proc-stmt [ ; proc-stmt ]… [ ELSE proc-stmt [ ; proc-stmt ]… ] END IF
| insert-statement | loop-statement | RETURN [ proc-expr ] | transaction-statement | select-statement-with-into | select-statement | assignment-statement | update-statement procedure-name ::= user-defined-name
public-or-user-group-name ::= PUBLIC | user-group-name query-specification ::= ( query-specification )
| SELECT [ ALL | DISTINCT ] select-list FROM table-reference [ , table-reference ]… [ WHERE search-condition ]
[ GROUP BY expression [ , expression ]… [ HAVING search-condition ] ]
referencing-alias ::= OLD [ AS ] correlation-name [ NEW [ AS ] correlation-name ] | NEW [ AS ] correlation-name [ OLD [ AS ] correlation-name ]
referential-actions ::= referential-delete-action referential-delete-action ::= ON DELETE CASCADE
scalar-function ::= 付録 D のリストを参照 scale ::= integer
search-condition ::= search-condition AND search-condition | search-condition OR search-condition | NOT search-condition
| ( search-condition ) | predicate
select-item ::= expression [ [ AS ] alias-name ] | table-name . * select-list ::= * | select-item [ , select-item ]…
select-statement-with-into ::= SELECT [ ALL | DISTINCT ] select-list
INTO variable-name [ , variable-name ]… FROM table-reference [ , table-reference ]… [ WHERE search-condition ]
[ GROUP BY expression [ , expression ]… [ HAVING search-condition ] ]
set-function ::= COUNT (*)
| COUNT ( expression ) | SUM ( [ ALL ] expression ) | AVG ( [ ALL ] expression ) | MIN ( [ ALL ] expression ) | MAX ( [ ALL ] expression ) start_proc_stmt ::= AS
table-constraint ::= UNIQUE ( column -name [ , column -name ]… )
| PRIMARY KEY ( column -name [ , column -name ]… ) | FOREIGN KEY ( column -name [ , column -name ] )
REFERENCES table-name [ ( column -name [ , column -name ]… ) ] [ referential-actions ]
table-constraint-definition ::= [ CONSTRAINT constraint-name ] table-constraint table-element ::= column -definition | table-constraint-definition
table-name ::= user-defined-name table-privilege ::= ALL
| SELECT [ ( column -name [ , column -name ]… ) ] | UPDATE [ ( column -name [ , column -name ]… ) ] | INSERT
| DELETE | ALTER | REFERENCES
table-reference ::= table-name [ [ AS ] alias-name ] trigger-name ::= user-defined-name
user-group-name ::= user-name user-name ::= user-defined-name value ::= literal | USER | ?
variable-name ::= user-defined-name. view-name ::= user-defined-name