sql - 如何从视图列中获取 SQLite 列类型
问题描述
定义这样的视图时:
CREATE TABLE x (a VARCHAR(10));
CREATE VIEW v AS SELECT a, a || ' ' AS b FROM x;
我现在想使用以下方法发现视图列的列类型:
PRAGMA table_info('v');
不幸的是,这导致
cid |name |type |notnull |dflt_value |pk |
----|-----|------------|--------|-----------|---|
0 |a |VARCHAR(10) |0 | |0 |
1 |b | |0 | |0 |
任何类型的列表达式都不存在列类型。是否有不同的方法来定义视图和/或查询表信息以获得列类型,或者这正是 SQLite 的类型关联的工作原理?
解决方案
我试过这个
CREATE VIEW v2 AS SELECT a, CAST((a || ' ') AS VARCHAR(11)) AS b FROM x;
也没有成功。
文档中没有记录答案。你在这里引用 https://www.sqlite.org/datatype3.html?
- 3.2 表达式的亲和性:“……否则,表达式没有亲和性。”
- 3.3 视图和子查询的列关联:...“表达式总是没有关联”。
事实上,您的问题可能是关于表/视图信息中的内容,而不是关于类型关联(也不是类型约束)。在我看来,这是 SQLite3 中的一个纯粹实现决定,即除了 CREATE VIEW 中的预定义属性之外,不为任何其他内容设置视图信息。
推荐阅读
- android - 如何避免向系统文件夹选择器请求权限?
- android - Flutter 无法从资产中加载文本
- javascript - 如何为图形数据构建 JSON-LD
- mysql - 使用 mysql 我需要将 html 代码添加到带有链接的字段中
- javascript - Function.prototype.bind 避免内存泄漏?
- git - 为什么`git update-ref -d`不删除空的父目录?
- python - 纸浆调度程序需要更有效的问题定义
- python - Elasticsearch:使用 python 加速两个索引的迭代
- python - pytorch分布式训练期间每个过程的准确性不同
- linux - 如何将脚本输出文件转换为文本?