我需要创建一个表并为每个字段添加某些字符。 我需要将每个字段括在""我还需要将字段分隔为管道 我的代码如下
Begin
execute immediate 'Create Table dbo.Temp_Weekly_Export_File as
Select ''"'' ||A.unique_id || ''"|'' as unique_id,
''"'' ||A.name || ''"|'' as name,
''"'' ||A.alt_name || ''"|'' as alt_name,
''"'' ||A.entity_type || ''"|'' as entity_type,
''"'' ||A.party_type || ''"|'' as party_type,
''"'' ||A.reference_# || ''"|'' as reference_#,
''"'' ||A.addr1 || ''"|'' as addr1 ,
''"'' ||A.addr2 || ''"|'' as addr2,
''"'' ||A.addr3 || ''"|'' as addr3,
''"'' ||A.town || ''"|'' as town,
''"'' ||A.county || ''"|'' as county,
''"'' ||A.postcode || ''"|'' as postcode,
''"'' ||A.country || ''"|'' as country,
''"'' ||A.alt_address1 || ''"|'' as alt_address1,
''"'' ||A.alt_address2 || ''"|'' as alt_address2,
''"'' ||A.alt_address3|| ''"|'' as alt_address3,
''"'' ||A.alt_town || ''"|'' as alt_town,
''"'' ||A.alt_county || ''"|'' as alt_county,
''"'' ||A.alt_post_code || ''"|'' as alt_post_code,
''"'' ||A.alt_country || ''"|'' as alt_country,
''"'' ||A.nationality || ''"|'' as nationality,
''"'' ||A.dob || ''"|'' as dob,
''"'' ||A.individual_id || ''"|'' as individual_id,
''"'' ||A.individual_id_type || ''"|'' as individual_id_type ,
''"'' ||A.country_of_registration|| ''"|'' as country_of_registration,
''"'' ||A.company_id || ''"|'' as company_id,
''"'' ||A.company_id_type || ''"|'' as company_id_type ,
''"'' ||A.source_country || ''"|'' as source_country,
''"'' ||A.source_system || ''"|'' as source_system,
''"'' ||A.transaction_type|| ''"|'' as transaction_type
From dbo.Temp_Weekly_Export A';
End;
我收到以下错误消息10:22:26 ORA-00923:未找到FROM关键字
答案 0 :(得分:2)
无需显式写入所有列名称,您可以使用以下
<强>设定:强>
create table source(colA, colB, colC) as (
select 1, 2, 3 from dual union all
select 4, 5, 6 from dual
)
plsql:
declare
vSQL varchar2(1000);
begin
select 'select ' || rtrim(listagg('''"''||' || column_name || '||''"|'' as ' || column_name || ',') within group ( order by column_name), ',') || ' from ' || table_name
into vSQL
from user_tab_columns
where table_name = 'SOURCE'
group by table_name;
--
vSQL := 'create table target as ' || vSQL;
execute immediate vSQL;
end;
结果:
SQL> select * from target;
COLA COLB COLC
---------- ---------- ----------
"1"| "2"| "3"|
"4"| "5"| "6"|
答案 1 :(得分:1)
见下面的例子。您只需要在'
"
declare
var varchar2(2000);
BEGIN
var:= 'Create Table Temp_Weekly_Export_File as
Select ''"'' ||UNIQUE_ID|| ''"|'' as unique_id,
''"'' ||NAME || ''"|'' as name
From Test ';
--dbms_output.put_line(var);
EXECUTE IMMEDIATE var;
END;
演示:
SQL> CREATE TABLE TEST
(
UNIQUE_ID VARCHAR2(103 CHAR),
NAME VARCHAR2(103 CHAR)
);
Table created.
SQL> declare
var varchar2(2000);
BEGIN
var:= 'Create Table Temp_Weekly_Export_File as
Select ''"'' ||UNIQUE_ID|| ''"|'' as unique_id,
''"'' ||NAME || ''"|'' as name
From Test ';
--dbms_output.put_line(var);
EXECUTE IMMEDIATE var;
END;
/
PL/SQL procedure successfully completed.
SQL> select * from Temp_Weekly_Export_File;
no rows selected
答案 2 :(得分:0)
我喜欢ALEKSEJ的回答。每当我必须使用双引号时,我都会替换Q引用语法。我发现阅读和更改更容易。我不再需要加倍报价。以下是使用Q引号的Alek解决方案:
BEGIN
SELECT 'select '
|| RTRIM (
LISTAGG (q'['"' ||]' || column_name || q'[||'"|' as ]' || column_name || ',')
WITHIN GROUP (ORDER BY column_name)
, ','
)
|| ' from '
|| table_name
INTO vsql
FROM user_tab_columns
WHERE table_name = 'SOURCE'
GROUP BY table_name;
--
vsql := 'create table target as ' || vsql;
EXECUTE IMMEDIATE vsql;
END;
Q引号可以包含配对符号
q&#39; []&#39;,q&#39; {}&#39;,q&#39;&lt; &gt;&#39;或q&#39;()&#39;