table中的函数

table.concat(tb,sep,start,end)

concat是concatenate的缩写(连接,连锁)table.concat()列出tb中数字部分start到end部分的所有元素,其间可以用sep分隔。出了table以外,其他三个参数不是必须的,sep默认是空字符串,start为1,end为table的数组部分的长度。

sep、start、end虽然不是必须的参数,但是如果指定了靠后的参数,必须同时指定前面的参数。

tb={"imust",2,3,x="weiyu",5,6,y="like",7,8};

print("{"..table.concat(tb,",").."}";     ---输出{imust,2,3,5,6,7,8} 没有x=“weiyu"和y="like",因为这两项不是table的数组部分

table.insert(tb,pos,value)

table.insert()是在tb的指定pos插入一个value(可以是任何东西,如表),pos可选,默认是tb 的尾部。。

tb={"imust",2,3,x="weiyu",5,6,y="like",7,8}

table.insert(tb,"beyond")

print("{"..table.concat(tb,",").."}")   --{imust,2,3,5,6,7,8,beyond}

table.insert(tb,1,"beyond")

print("{"..table.concat(a,",").."}")   --{beyond,imust,2,3,5,6,7,8}

b={"hello imust.cn"}

table.insert(tb,1,b)

for k,v in pairs(tb) do

    if type(v) == "table" thend

       for kk, vv in pairs(v) do

           print("k:"..kk.."  v:"..vv)

       end

    else

        print("k:"..k.."  v:"..v)

    end

end           --先遍历表b在遍历表tb

table.maxn(tb)

table.maxn(tb)返回tb中所有正数key(非连续的)中最大的key值,如果不存在key值为正数的元素,则返回0,此函数不限于tbale 的数组部分。

tb={"imust",2,3,x="weiyu",5,6,y="like",7,8,[11]=11}

print(#tb)    --7        {[1]="imust",[2]=2,[3]=3,[4]=5,[5]=6,[6]=7,[7]=8}   [11]和之前的数组部分不连续,所有不算在数组部分。

print(table.maxn(tb))   --11         {[11]=11}

table.remove(tb,pos)

table.remove(tb,pos)从tb中指定的pos删除并返回table中数组部分pos位置的元素,其后的元素被前移,pos可选,默认从表的末尾删除。

tb={"imust",2,3,x="weiyu",5,6,y="like",7,8}

print(table.remove(tb))   --返回删除位置的元素  8

table.sort(tb,comp)

table.sort()对指定的表进行升序排序。

a={"imust","3","2",x="yu","5",z="wei"}

print("{"..table.concat(a,",".."}")   --{imust,3,2,5}

table.sort(a)  --升序排序

print("{"..table.concat(a,",").."}")  --{2,3,5,imust}  非数组部分不进行排序(不连续的数组也不排序)

comp是可选参数,是外部函数,定义排序标准。

此函数应该满足以下条件:接受2个参数(a,b)返回一个bool,当a应该排在b前面时返回true,反之返回false。

如降序排序

a={"imust","3","2",x="yu","5",z="wei"}

comp=functin(a,b) return b<a end     --b>a为升序,可以构造出更复杂的排序函数

table.sort(a,comp)

print("{"..table.concat(a,",").."}")   --{imust,5,3,2}

 

### Oracle TABLE 函数使用说明 #### 什么是TABLE函数? `TABLE` 函数用于将嵌套表或集合作为查询的一部分来操作。它可以将复杂的数据结构转换为行和列的形式,从而允许通过标准SQL语句访问这些数据[^4]。 #### 使用场景 `TABLE` 函数通常与PL/SQL中的集合类型(如`VARRAY` 或 `NESTED TABLE`)一起使用。它可以在不创建物理表的情况下,直接从内存中的集合或其他数据源中提取并展示数据。 --- #### 创建必要的对象 为了演示`TABLE`函数的用法,首先需要定义一些自定义类型: ```sql -- 定义对象类型 CREATE OR REPLACE TYPE obj_table_1 AS OBJECT ( fileid VARCHAR2(4000), filename VARCHAR2(4000) ); / -- 定义基于对象类型的集合类型 CREATE OR REPLACE TYPE t_table_1 IS TABLE OF obj_table_1; / ``` 上述代码分别定义了一个对象类型`obj_table_1` 和一个集合类型`t_table_1`,后者表示一组`obj_table_1` 类型的对象[^1]。 --- #### 示例:使用TABLE函数查询集合数据 假设有一个PL/SQL块生成了一些数据,并将其存储在一个集合变量中。可以通过`TABLE`函数将这个集合转化为表格形式进行查询。 ##### PL/SQL块准备数据 ```sql DECLARE v_data t_table_1 := t_table_1(); -- 初始化集合变量 BEGIN -- 向集合中添加元素 v_data.EXTEND; v_data(v_data.COUNT) := obj_table_1('ID1', 'File_A.txt'); v_data.EXTEND; v_data(v_data.COUNT) := obj_table_1('ID2', 'File_B.txt'); -- 插入更多数据... -- 将集合传递给外部查询 INSERT INTO some_table (file_id, file_name) SELECT column_value.fileid, column_value.filename FROM TABLE(v_data); -- 使用TABLE函数展开集合 COMMIT; END; / ``` 在这个例子中,`v_data` 是一个集合变量,包含了多个`obj_table_1` 对象。通过`TABLE`函数,可以将集合的内容当作虚拟表来进行查询。 --- #### 查询集合内容 如果想直接查看集合中的数据而不插入到其他表中,可以直接执行如下SQL语句: ```sql SELECT * FROM TABLE(t_table_1( obj_table_1('ID1', 'File_A.txt'), obj_table_1('ID2', 'File_B.txt') )); ``` 这段代码展示了如何利用`TABLE`函数即时构建并查询一个临时数据集。注意这里不需要提前创建任何实际的数据库表。 --- #### 结合管道函数使用 `TABLE`函数还可以与管道函数联合使用,进一步增强灵活性。例如下面的例子展示了如何结合管道化输出实现动态结果集: ##### 管道函数定义 ```sql CREATE OR REPLACE FUNCTION get_files RETURN t_table_1 PIPELINED IS BEGIN PIPE ROW(obj_table_1('ID1', 'File_A.txt')); PIPE ROW(obj_table_1('ID2', 'File_B.txt')); RETURN; END; / ``` ##### 调用管道函数并通过TABLE查询 ```sql SELECT * FROM TABLE(get_files()); ``` 以上方法能够高效地返回由管道函数产生的多条记录,并且支持复杂的业务逻辑处理。 --- ### 总结 - `TABLE` 函数提供了一种机制,使得可以从非传统的关系型数据源(比如数组、集合等)读取数据。 - 配合自定义类型以及管道函数,能极大提升程序设计上的自由度和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值