SQL:从csv文件读取,作为更大的SQL查询的一部分

时间:2016-10-21 10:15:27

标签: sql oracle

我正在尝试将csv读入SQL而不使用单独的查询导入文件。我没有写入权限,因此无法导入文件或创建表格。

我想做的是这样的事情:

Select * 
From path_to_file/myfile.csv T1
inner join a_schema.a_table T2 on T1.ID = T2.ID

编辑1:我正在使用什么SQL

select * from v$version

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE   11.2.0.4.0  Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

编辑2: 我尝试创建一个临时表:

create table #Temp
( ID VARCHAR2(100 CHAR),
  Col2 VARCHAR2(100 CHAR),
  )

但是我收到了这个错误:

dentifiers may not start with any ASCII character other than
           letters and numbers.  $#_ are also allowed after the first
           character.  Identifiers enclosed by doublequotes may contain
           any character other than a doublequote.  Alternative quotes
           (q'#...#') cannot use spaces, tabs, or carriage returns as
           delimiters.  For all other contexts, consult the SQL Language
           Reference Manual.

编辑2.1:

尝试了这个:

create global temporary table Temp ...

并且没有足够的权限错误。

1 个答案:

答案 0 :(得分:1)

如果您使用Oracle。

据我所知,您希望在没有创建表或导入内容的权限的情况下获取oracle数据库中的数据。

我看到有两种方法可以做到这一点

1)您可以尝试使用自己的数据创建视图(如果您有 func fetchDataFromDB() { let moc = managedObjectContext let photoFetch = NSFetchRequest(entityName: "PhotoLibrary") do { let searchTerms = CommonUtil.getDataForKey("token") photoFetch.predicate = NSPredicate(format: "NOT (accesstoken CONTAINS %@)",searchTerms) let photoArray = try moc.executeFetchRequest(photoFetch) for result in photoArray { let match = result as! NSManagedObject let keys = Array(match.entity.attributesByName.keys) let dict = match.dictionaryWithValuesForKeys(keys) debugPrint(dict) let filePath : String = String(format: dict["photopath"]! as AnyObject as! String) self.arrGallery.addObject(filePath) } } catch { fatalError("Failed to fetch employees: \(error)") } }

grant create view

2)在plsql bloc中创建clob并尝试将数据加载到由32767个字符分隔数据的lob中。或者,如果您有一些IDE加载lob作为测试窗口的参数。例如PL \ SQL Developer允许它。 并使用它作为原始数据来获取某些东西。

 create or replace view as 
 select cvs_val1,cvs_val2 ... 

两种方式都是扭曲的

最后只是为了获取信息的好方法是创建外部表。如果您有权创建表并访问光盘上的某个oracle目录

,则它可以工作
variable :l_clob clob; 
:l_clob := 'CVS_col1, CVS_col2'... -- row1;
:l_clob := :l_clob||chr(13)||chr(10)||'CVS_col1, CVS_col2'... -- row2;
...

declare 

begin
  <do something with data for instance create view here>
end;
/