同意M.Wymann的观点,我需要通过传递列表中元素的数量来返回字符串。这是我的密码。cursor = con.cursor()
for a,b,c in data:
statement='''DECLARE
t_name VARCHAR2 (50);
owner VARCHAR2 (50);
c_name VARCHAR2 (50);
O_type VARCHAR2 (50);
nullable VARCHAR2 (20);
BEGIN
SELECT t1.table_name,
t1.owner,
t1.column_name,
CASE
WHEN t1.data_type = 'NUMBER' AND t1.data_precision IS NULL
THEN
'NUMBER'
WHEN t1.data_type = 'DATE'
THEN
t1.data_type
WHEN REGEXP_REPLACE (t1.data_type, '(\d)|VAR', '') = 'CHAR'
THEN
t1.data_type || '(' || t1.DATA_LENGTH || ')'
WHEN t1.data_type = 'NUMBER'
AND t1.data_precision IS NOT NULL
AND t1.data_scale = 0
THEN
'NUMBER(' || t1.data_precision || ')'
WHEN t1.data_type = 'NUMBER'
AND t1.data_precision IS NOT NULL
AND t1.data_scale <> 0
THEN
'NUMBER(' || t1.data_precision || ',' || t1.data_scale || ')'
ELSE
'Not Handled'
END
"Oracle data type",
t1.nullable
INTO t_name,
owner,
c_name,
O_type,
nullable
FROM all_tab_columns t1
WHERE t1.table_name = :tname
AND t1.owner = :towner
AND t1.column_name = :tcolname;
:o_result :=
t_name
|| '|'
|| owner
|| '|'
|| c_name
|| '|'
|| O_type
|| '|'
|| nullable;
EXCEPTION
WHEN OTHERS
THEN
t_name := :tname;
c_name := 'NOT FOUND ';
owner := :towner;
O_type := 'NOT FOUND ';
nullable := 'NOT FOUND ';
:o_result :=
t_name
|| '|'
|| owner
|| '|'
|| c_name
|| '|'
|| O_type
|| '|'
|| nullable;
END;'''
o_result = cursor.var(cx_Oracle.STRING)`enter code here`
cursor.execute(statement, tname=a, towner=b, tcolname=c, o_result=o_result)
ObLst = o_result.getvalue().split('|')