精通Oracle10编程SQL(8)使用复合数据类型
数据库  /  管理员 发布于 4年前   300
/* *使用复合数据类型 */--PL/SQL记录--定义PL/SQL记录--自定义PL/SQL记录DECLARE TYPE emp_record_type IS RECORD( name emp.ename%TYPE, salary emp.sal%TYPE, dno emp.deptno%TYPE ); emp_record emp_record_type; ... --使用PL/SQL记录--在SELECT INTO语句中使用PL/SQL记录--在SELECT INTO语句中使用记录变量DECLARE TYPE emp_record_type IS RECORD( name emp.ename%TYPE, salary emp.sal%TYPE, dno emp.deptno%TYPE); emp_record emp_record_type;BEGIN SELECT ename,sal,deptno into emp_record from emp where empno=&no; dbms_output.put_line(emp_record.name);end;--在SELECT INTO语句中使用记录成员DECLARE type emp_record_type is record( name emp.ename%TYPE, salary emp.sal%TYPE, dno emp.deptno%TYPE); emp_record emp_record_type;BEGIN SELECT ename,sal into emp_record.name,emp_record.salary from emp where empno=&no; dbms_output.put_line(emp_record.name);end;--在INSERT语句中使用PL/SQL记录--在VALUES子句中使用记录变量DECLARE dept_record dept%ROWTYPE;BEGIN dept_record.deptno:=51; dept_record.dname:='ADMINISTRATOR'; dept_record.loc:='BEIJING'; insert into dept values dept_record;END;SELECT * FROM dept;--在VALUES子句中使用记录成员declare dept_record dept%ROWTYPE;begin dept_record.deptno:=60; dept_record.dname:='SALES'; INSERT INTO dept(deptno,dname) values (dept_record.deptno,dept_record.dname);end;--在UPDATE语句中使用PL/SQL记录--在SET子句中使用记录变量DECLARE dept_record dept%ROWTYPE;begin dept_record.deptno:=60; dept_record.dname:='SALES'; dept_record.loc:='SHANGHAI'; update dept set row=dept_record where deptno=60;end;select * from dept;--在SET子句中使用记录成员DECLARE dept_record dept%ROWTYPE;BEGIN dept_record.loc:='GUANGZHOU'; UPDATE dept set loc=dept_record.loc where deptno=50;end;--在DELETE语句中使用PL/SQL记录DECLARE dept_record dept%ROWTYPE;begin dept_record.deptno:=50; delete from dept where deptno=dept_record.deptno;end;select * from dept;--PL/SQL集合--索引表--在索引表中使用BINARY_INTEGER和PLS_INTEGERDECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type;BEGIN SELECT ename into ename_table(-1) from emp where empno=&no; dbms_output.put_line('雇员名:'||ename_table(-1));END;SELECT * FROM EMP; --在索引表中使用VARCHAR2DECLARE TYPE area_table_type IS TABLE OF NUMBER INDEX BY VARCHAR2(10); area_table area_table_type;BEGIN area_table('北京'):=1; area_table('上海'):=2; area_table('广州'):=3; dbms_output.put_line('第一个元素:'||area_table.first); dbms_output.put_line('最后一个元素:'||area_table.last);END;--嵌套表--在PL/SQL块中使用嵌套表--其中,ename_table_type为嵌套表类型,而ename_table_type()是其构造方法DECLARE type ename_table_type is table of emp.ename%TYPE; ename_table ename_table_type;BEGIN ename_table:=ename_table_type('MARY','MARY','MARY'); select ename into ename_table(2) from emp where empno=&no; dbms_output.put_line('雇员名:'||ename_table(2));END;--在表列中使用嵌套表create type phone_type is table of varchar2(20);create table employeeTest( id number(4),name varchar2(10),sal number(6,2), phone phone_type)nested table phone store as phone_table;--在PL/SQL块中为嵌套表列插入数据BEGIN INSERT INTO employeeTest values(1,'SCOTT',800, phone_type('0739-12121212','13800001111'));END;select * from employeeTest;--在PL/SQL块中检索嵌套表列的数据DECLARE phone_table phone_type;BEGIN SELECT phone into phone_table from employeeTest where id=1; for i IN 1..phone_table.count loop dbms_output.put_line('电话号码:'||phone_table(i)); end loop;end;--在PL/SQL块中更新嵌套表列的数据DECLARE phone_table phone_type:=phone_type('0471-3456788','13825252525','0471-2233066','13056278568');BEGIN UPDATE employeeTest set phone=phone_table where id=1;END;--变长数组(VARRAY)--在PL/SQL块中使用VARRY--当在PL/SQL块中使用VARRAY变量时,必须首先使用其构造方法来初始化VARRAY变量,然后才能在PL/SQL块内引用VARRAY元素DECLARE TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE; ename_table ename_table_type:=ename_table_type('mary');BEGIN SELECT ename into ename_table(1) from emp where empno=&no; dbms_output.put_line('雇员名:'||ename_table(1));END;--在表列中使用VARRAYcreate type phone_type is varray(20) of varchar2(20);create table employee( id number(4),name varchar2(10), sal number(6,2),phone phone_type);--PL/SQL记录表--处理多行多列数据DECLARE type emp_table_type is table of emp%ROWTYPE INDEX BY binary_integer; emp_table emp_table_type;BEGIN select * into emp_table(1) from emp where empno=&no; dbms_output.put_line('雇员姓名:'||emp_table(1).ename); dbms_output.put_line('雇员工资:'||emp_table(1).sal);END;--多级集合--在PL/SQL块中使用多级VARRAYDECLARE --定义一维VARRAY TYPE al_varray_type IS VARRAY(10) of int; --定义二维VARRAY集合 TYPE nal_varray_type is varray(10) of al_varray_type; --初始化二维集合变量 nvl nal_varray_type:=nal_varray_type( al_varray_type(58,100,102), al_varray_type(55,6,73), al_varray_type(2,4));BEGIN dbms_output.put_line('显示二维数组所有元素'); for i in 1..nvl.count loop for j in 1..nvl(i).count loop dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j)); end loop; end loop;END;--在PL/SQL块中使用多级嵌套表DECLARE --定义一维嵌套表 TYPE al_table_type is table of int; --定义二维嵌套表集合 TYPE nal_table_type is table of al_table_type; --初始化二维集合变量 nvl nal_table_type:=nal_table_type( al_table_type(2,4,78), al_table_type(5,73));BEGIN DBMS_OUTPUT.put_line('显示二维数组所有元素'); for i in 1..nvl.count loop for j in 1..nvl(i).count loop dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j)); end loop; end loop;END;--在PL/SQL块中使用多级索引表DECLARE --定义一维table TYPE al_table_type IS TABLE OF INT INDEX BY BINARY_INTEGER; --定义二维table集合 TYPE nal_table_type is TABLE OF al_table_type index by BINARY_INTEGER; nvl nal_table_type;BEGIN nvl(1)(1):=10; nvl(1)(2):=5; nvl(1)(3):=57; nvl(2)(1):=100; nvl(2)(2):=50; DBMS_OUTPUT.put_line('显示二维数组所有元素'); for i in 1..nvl.count loop for j in 1..nvl(i).count loop dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j)); end loop; end loop;END;--集合方法--集合方法是ORACLE所提供的用于操纵集合变量的内置函数或过程,其中EXISTS,COUNT,LIMIT,FIRST,NEXT,PRIOR和NEXT是函数,而EXTEND,TRIM和DELETE则是过程。--集合方法的调用语法如下:collection_name.method_name[(parameters)]--集合方法只能在PL/SQL语句中使用,而不能在SQL语句中调用。另外集合方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适用于索引表。--EXISTSDECLARE TYPE ename_table_type is table of emp.ename%TYPE; ename_table ename_table_type;BEGIN if ename_table.EXISTS(1) THEN ename_table(1):='SCOTT'; else dbms_output.put_line('必须初始化集合元素'); end if;END;--COUNT--返回当前集合变量中的元素总个数,如果集合元素存在数值,则统计结果会包含该元素,如果集合元素为NULL,则统计结果不会包含该元素DECLARE type ename_table_type is table of emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type;BEGIN ename_table(-5):='SCOTT'; ename_table(0):='SMITH'; ename_table(5):='MARY'; ename_table(10):='BLAKE'; dbms_output.put_line('集合元素总个数:'||ename_table.count);END;--LIMIT--返回集合元素的最大个数,因为嵌套表和索引表的元素个数没有限制,所以调用该方法会返回NULL,而对于VARRAY来说,该方法会返回VARRAY所允许的最大元素个数DECLARE type ename_table_type is varray(20) of emp.ename%TYPE; ename_table ename_table_type:=ename_table_type('mary');BEGIN DBMS_OUTPUT.PUT_LINE('集合元素的最大个数:' || ename_table.limit);END;--FIRST和LAST--FIRST返回集合变量第一个元素的下标,而LAST方法则用于返回集合变量最后一个元素的下标DECLARE type ename_table_type is table of emp.ename%TYPE INDEX BY binary_integer; ename_table ename_table_type;BEGIN ename_table(-5):='SCOTT'; ename_table(0):='SMITH'; ename_table(5):='MARY'; ename_table(10):='BLAKE'; dbms_output.put_line('第一个元素:'||ename_table.first); dbms_output.put_line('最后一个元素:'||ename_table.last);END;--PRIOR和NEXT--PRIOR用于返回当前集合元素的前一个元素的下标,而NEXT方法则用于返回当前集合元素的后一个元素的下标DECLARE type ename_table_type is table of emp.ename%TYPE INDEX BY binary_integer; ename_table ename_table_type;BEGIN ename_table(-5):='SCOTT'; ename_table(0):='SMITH'; ename_table(5):='MARY'; ename_table(10):='BLAKE'; dbms_output.put_line('元素5的前一个元素:'||ename_table.prior(5)); dbms_output.put_line('元素5的后一个元素:'||ename_table.next(5));END;--EXTEND--用于扩展集合变量的尺寸,并为它们增加元素,该方法只适用于嵌套表和VARRAY。--EXTEND:为集合变量添加一个null元素--EXTEND(n):为集合变量添加n个null元素--EXTEND(n,i):为集合变量添加n个元素(元素值与第i个元素相同)DECLARE TYPE ename_table_type is array(20) of varchar2(10); ename_table ename_table_type;BEGIN ename_table:=ename_table_type('MARY'); ename_table.extend(5,1); dbms_output.put_line('元素总个数:'||ename_table.count);END;--TRIM--用于从集合尾部删除元素,它有TRIM和TRIM(n)两种调用格式--其中TRIM用于从集合尾部删除一个元素,而TRIM(n)则用于从集合尾部删除n个元素。--该方法只适用于嵌套表和VARRAYDECLARE type ename_table_type is table of varchar2(10); ename_table ename_table_type;BEGIN ename_table:=ename_table_type('A','A','A','A','A'); ename_table.trim(2); dbms_output.put_line('元素总个数:'||ename_table.count);END;--DELETE--用于删除集合元素,该方法只适用于嵌套表和索引表,而不适用于VARRAY--DELETE:删除集合变量的所有元素--DELETE(n):删除集合变量的第n个元素--DELETE(m,n):删除集合变量中从m到n之间的所有元素DECLARE TYPE ename_table_type is table of emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type;BEGIN ename_table(-5):='SCOTT'; ename_table(1):='SMITH'; ename_table(5):='MARY'; ename_table(10):='BLAKE'; ename_table.delete(5); dbms_output.put_line('元素总个数:'||ename_table.count);END;--集合赋值--通过执行INSERT,UPDATE,FETCH,SELECT,赋值语句,用户可以将一个集合的数据赋值给另一个集合。--SET操作符用于取消嵌套表中的重复值--MULTISET UNION用于取得两个嵌套表的并集(带有DISTINCT操作符可以取消重复结果)--MULTISET INTERSECT用于取得两个嵌套表的交集--MULTISET EXCEPT用于取得两个嵌套表的差集--将一个集合的数据赋值给另一个集合--当使用赋值语句(:=)或SQL语句将源集合中的数据赋值给目标集合时,会自动清除目标集合原有的数据,并将源集合中的数据赋值给该目标集合--注意:当进行集合赋值时,源集合和目标集合的数据类型必须完全一致。如果集合元素数据类型一致,但集合类型不一致,那也不能进行赋值。DECLARE TYPE name_varray_type is varray(4) of varchar2(10); name_array1 name_varray_type; name_array2 name_varray_type;BEGIN name_array1:=name_varray_type('SCOTT','SMITH'); name_array2:=name_varray_type('a','a','a','a'); dbms_output.put('name_array2的原数据:'); for i in 1..name_array2.count loop dbms_output.put(' '||name_array2(i)); end loop; dbms_output.new_line; name_array2:=name_array1; dbms_output.put('name_array2的新数据:'); for i in 1..name_array2.count loop dbms_output.put(' '||name_array2(i)); end loop; dbms_output.new_line;END;--给集合赋NULL值DECLARE TYPE name_varry_type is varray(4) of varchar2(10); name_array name_varry_type; name_empty name_varry_type;BEGIN name_array:=name_varry_type('SCOTT','SMITH'); dbms_output.put_line('name_array的原有元素个数:'||name_array.count); name_array:=name_empty; if name_array is null then dbms_output.put_line('name_array的现有元素个数:0'); end if;END;--使用集合操作符给嵌套表赋值--使用SET操作符DECLARE type nt_table_type is table of number; nt_table nt_table_type:=nt_table_type(2,4,3,1,2); result nt_table_type;BEGIN result:=set(nt_table); dbms_output.put('result:'); for i in 1..result.count loop dbms_output.put(' '||result(i)); end loop; dbms_output.new_line;END;--使用MULTISET UNION操作符--用于取得两个嵌套表的并集DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3); nt2 nt_table_type:=nt_table_type(3,4,5); result nt_table_type;BEGIN result:=nt1 multiset union nt2; dbms_output.put('result:'); for i in 1..result.count loop dbms_output.put(' '||result(i)); end loop; dbms_output.new_line;END;--使用MULTISET UNION DISTINCT操作符--取得两个嵌套表的并集,并取消重复结果DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3); nt2 nt_table_type:=nt_table_type(3,4,5); result nt_table_type;BEGIN result:=nt1 multiset union distinct nt2; dbms_output.put('result:'); for i in 1..result.count loop dbms_output.put(' '||result(i)); end loop; dbms_output.new_line;END;--使用MULTISET INTERSECT操作符--用于取得两个嵌套表的交集DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3); nt2 nt_table_type:=nt_table_type(3,4,5); result nt_table_type;BEGIN result:=nt1 multiset intersect nt2; dbms_output.put('result:'); for i in 1..result.count loop dbms_output.put(' '||result(i)); end loop; dbms_output.new_line;END;--使用MULTISET EXCEPT操作符--用于取得两个嵌套表的差集DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3); nt2 nt_table_type:=nt_table_type(3,4,5); result nt_table_type;BEGIN result:=nt1 multiset except nt2; dbms_output.put('result:'); for i in 1..result.count loop dbms_output.put(' '||result(i)); end loop; dbms_output.new_line;END;--比较集合--CARDINALITY用于返回嵌套表变量的元素个数,操作符SUBMULTISET OF用于确定一个嵌套表是否为另一个嵌套表的子集--MEMBER OF用于检测特定数据是否为嵌套表元素--IS A SET用于检测嵌套表是否包含重复的元素值--IS EMPTY用于检测嵌套表是否为NULL--检测集合是否为NULLDECLARE type name_array_type is varray(3) of varchar2(10); name_array name_array_type;BEGIN IF name_array is null then dbms_output.put_line('name_array未初始化'); END IF;END;--当检测嵌套表是否为NULL时,不仅可以使用IS NULL操作符,也可以使用IS EMPTY操作符。--注意,IS EMPTY操作符只适用于嵌套表,而不适用于VARRAYDECLARE TYPE name_table_type is table of varchar2(10); name_table name_table_type;BEGIN if name_table is EMPTY then dbms_output.put_line('name_table未初始化'); end if;END;--比较嵌套表是否相同--允许使用比较操作符=和!=检测两个嵌套表变量是否相同--注意,使用这两个比较符只能比较嵌套表,而不能比较VARRAY和索引表DECLARE TYPE name_table_type is table of varchar2(10); name_table1 name_table_type; name_table2 name_table_type;BEGIN name_table1:=name_table_type('SCOTT'); name_table2:=name_table_type('SMITH'); if name_table1=name_table2 then dbms_output.put_line('两个嵌套表完全相同'); else dbms_output.put_line('两个嵌套表数值不同'); END IF;END;--在嵌套表上使用集合操作符--从ORACLE 10g开始,可以在嵌套表上使用ANSI集合操作符CARDINALITY,MEMBER OF,IS A SET。--注意,这些操作符只适用于嵌套表,而不适用于VARRAY和索引表--使用函数CARDINALITY,用于返回嵌套表变量的元素个数DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3,1);BEGIN dbms_output.put_line('元素个数:'||cardinality(nt1));END;--SUBMULTISET OF:确定一个嵌套表是否为另一个嵌套表的子集DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,4); nt2 nt_table_type:=nt_table_type(1,2,3,4);BEGIN if nt1 submultiset of nt2 then dbms_output.put_line('nt1是nt2的子集'); end if;END;--使用操作符MEMBER OF:检测特定数据是否为嵌套表的元素DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3,5); v1 number:=&v1;BEGIN if v1 member of nt1 then dbms_output.put_line(v1||'是nt1的元素'); else dbms_output.put_line(v1||'不是nt1的元素'); end if;END;--使用操作符IS A SET:检测嵌套表是否包含重复的元素值DECLARE TYPE nt_table_type is table of number; nt1 nt_table_type:=nt_table_type(1,2,3,5);BEGIN if nt1 is a set then dbms_output.put_line('嵌套表nt1无重复值'); else dbms_output.put_line('嵌套表nt1有重复值'); end if;END;--批量绑定create table demo( id number(6) primary key,name varchar2(10));--不使用批量绑定DECLARE TYPE id_table_type is table of number(6) index by binary_integer; TYPE name_table_type is table of varchar2(10) index by binary_integer; id_table id_table_type; name_table name_table_type; start_time number(10); end_time number(10);BEGIN FOR i in 1..5000 loop id_table(i):=i; name_table(i):='Name'||to_char(i); end loop; start_time:=dbms_utility.get_time; for i in 1..id_table.count loop insert into demo values(id_table(i),name_table(i)); end loop; end_time:=dbms_utility.get_time; dbms_output.put_line('总计时间(秒):'||to_char((end_time-start_time)/100));END;select * from demo order by id;delete demo;--使用批量绑定DECLARE TYPE id_table_type is table of number(6) index by binary_integer; TYPE name_table_type is table of varchar2(10) index by binary_integer; id_table id_table_type; name_table name_table_type; start_time number(10); end_time number(10);BEGIN FOR i in 1..5000 loop id_table(i):=i; name_table(i):='Name'||to_char(i); end loop; start_time:=dbms_utility.get_time; forall i in 1..id_table.count insert into demo values(id_table(i),name_table(i)); end_time:=dbms_utility.get_time; dbms_output.put_line('总计时间(秒):'||to_char((end_time-start_time)/100));END;--批量绑定是使用BULK COLLECT子句和FORALL语句来完成的,其中BULK COLLECT子句用于取得批量数据,该子句只能用于SELECT语句、FETCH语句和DML返回子句中--而FORALL语句只适用于执行批量的DML操作--FORALL语句--在INSERT语句上使用批量绑定DECLARE TYPE id_table_type is TABLE OF NUMBER(6) INDEX BY BINARY_INTEGER; TYPE name_table_type is TABLE OF VARCHAR2(10) index by binary_integer; id_table id_table_type; name_table name_table_type;BEGIN for i in 1..10 loop id_table(i):=i; name_table(i):='Name'||to_char(i); end loop; forall i in 1..id_table.count insert into demo values(id_table(i),name_table(i));End;select * from demo;--在UPDATE语句上使用批量绑定DECLARE TYPE id_table_type is TABLE OF NUMBER(6) INDEX BY BINARY_INTEGER; TYPE name_table_type is TABLE OF VARCHAR2(10) index by binary_integer; id_table id_table_type; name_table name_table_type;BEGIN for i in 1..5 loop id_table(i):=i; name_table(i):='N'||to_char(i); end loop; forall i in 1..id_table.count update demo set name=name_table(i) where id=id_table(i);End;--在DELETE语句上使用批量绑定DECLARE TYPE id_table_type is table of NUMBER(6) INDEX BY binary_integer; id_table id_table_type;BEGIN for i in 1..3 loop id_table(i):=i; end loop; forall i in 1..id_table.count delete from demo where id=id_table(i);END;--在FORALL语句中使用部分集合元素DECLARE TYPE id_table_type is table of number(6) index by binary_integer; id_table id_table_type;BEGIN for i in 1..10 loop id_table(i):=11-i; end loop; forall i in 8..10 insert into demo(id) values(id_table(i));END;SELECT * FROM DEMO;--在FORALL语句上使用INDICES OF子句--用于跳过NULL集合元素DECLARE TYPE id_table_type is table of number(6); id_table id_table_type;BEGIN id_table:=id_table_type(1,null,3,null,5); forall i in indices of id_table DELETE FROM demo where id=id_table(i);END;--在FORALL语句上使用VALUES OF子句create table new_demo as select * from demo where 1=0;select * from new_demo;select * from demo;delete new_demo;DECLARE TYPE id_table_type is table of demo.id%TYPE; TYPE name_table_type is table of demo.name%TYPE; id_table id_table_type; name_table name_table_type; TYPE index_pointer_type is table of PLS_INTEGER; index_pointer index_pointer_type;BEGIN select * bulk collect into id_table,name_table from demo; index_pointer:=index_pointer_type(4,6,7); --将第4,6,7这三行数据复制到new_demo表中 forall i in values of index_pointer insert into new_demo values(id_table(i),name_table(i));END;--使用SQL%BULK_ROWCOUNT属性--属性SQL%BULK_ROWCOUNT是专门为FORALL语句提供的,用于取得在执行批量绑定操作时第i个元素所作用的行数DECLARE TYPE dno_table_type is table of number(3); dno_table dno_table_type:=dno_table_type(10,2);BEGIN forall i in 1..dno_table.count update emp set sal=sal*1.1 where deptno=dno_table(i); dbms_output.put_line('第2个元素更新的行数:'||sql%bulk_rowcount(2));END;select * from emp;--BULK COLLECT子句--在SELECT INTO语句中使用BULK COLLECT子句DECLARE TYPE emp_table_type is table of emp%ROWTYPE INDEX BY BINARY_INTEGER; emp_table emp_table_type;BEGIN SELECT * BULK COLLECT INTO emp_table from emp where deptno=&no; for i in 1..emp_table.count loop dbms_output.put_line('雇员姓名:'||emp_table(i).ename); end loop;END;--在DML的返回子句中使用BULK COLLECT子句DECLARE TYPE ename_table_type is table of emp.ename%TYPE; ename_table ename_table_type;BEGIN DELETE FROM emp where deptno=&no returning ename bulk collect into ename_table; dbms_output.put('雇员名:'); for i in 1..ename_table.count loop dbms_output.put(ename_table(i)||' '); end loop; DBMS_OUTPUT.new_line;END;
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号