我目前正在学习PL / SQL,所以我仍然是新手。假设您有一个生产数据库,您可以使用Oracle SQL
Developer将其连接到该数据库。您只有该数据库的READ特权。因此,您不能创建或编辑任何表。
我的问题是,如果我有大量的ID,我必须将其与该数据库中的表连接起来,该怎么办?
显然,我可以将ID加载到临时表上,然后进行联接,但这确实很乏味,因为我只有READ特权。硬编码ID也不是一种选择,因为列表太大。
另外请注意,我知道TEMPORARY表的概念。但不幸的是,我也没有创建这些特权。
SQL Developer中有什么html" target="_blank">解决方案可以加载ID列表以与数据库中的表匹配?
使用收藏
VARIABLE cursor REFCURSOR;
DECLARE
your_collection SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
BEGIN
your_collection.EXTEND( 10000 );
FOR i IN 1 .. 10000 LOOP
-- Populate the collection.
your_collection(i) := DBMS_RANDOM.STRING( 'x', 20 );
END LOOP;
OPEN :cursor FOR
SELECT t.*
FROM your_table t
INNER JOIN
TABLE( your_collection ) c
ON t.id = c.COLUMN_VALUE;
END;
/
PRINT cursor;
或通过java做同样的事情:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OraclePreparedStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class TestDatabase2 {
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","username","password");
String[] ids = { "1", "2", "3" };
ArrayDescriptor des = ArrayDescriptor.createDescriptor("SYS.ODCIVARCHAR2LIST", con);
PreparedStatement st = con.prepareStatement("SELECT t.* FROM your_table t INNER JOIN TABLE( :your_collection ) c ON t.id = c.COLUMN_VALUE");
// Passing an array to the procedure -
((OraclePreparedStatement) st).setARRAYAtName( "your_collection", new ARRAY( des, con, ids ) );
ResultSet cursor = st.executeQuery();
while ( cursor.next() )
{
int id = cursor.getInt(1);
double column1 = cursor.getDouble(2);
double column2 = cursor.getDouble(3);
System.out.println( String.format( "Id: %5d", id ) );
System.out.println( String.format( " Column1: %s", column1 ) );
System.out.println( String.format( " Column2: %s", column2 ) );
}
} catch(ClassNotFoundException | SQLException e) {
System.out.println(e);
}
}
}
问题内容: 我想知道是否有人对我即将从事的工作有任何经验。我有几个csv文件,它们的大小都在一个GB左右,我需要将它们加载到oracle数据库中。虽然加载后我的大部分工作都是只读的,但我仍需要不时加载更新。基本上,我只需要一个很好的工具即可一次将多行数据加载到数据库中。 到目前为止,这是我发现的内容: 我可以使用SQL Loader来完成很多工作 我可以使用批量插入命令 某种批量插入。 以某种方式
问题内容: 我收到以下错误: 第一个字段是格式。 有任何想法吗? 谢谢。 问题答案: 当您将字符串值插入日期列时,则需要在使用函数期间将其转换为日期。使用此功能时,您将提供字符串的格式。 功能格式: 因此,您的查询将如下所示: 参见带有演示的SQL Fiddle
问题内容: 我有一个oracle表,该表具有名为system_access的列,该列具有以下数据: 基于上述示例数据,我不确定我的查询仅检索与“只读”和/或“只读”的确切单词匹配的记录 我不需要具有“只读(否)”,后接空格或方括号的记录,或“只读(请参阅mgr)”,其后或接续无空格和括号的记录。 因此,根据以上示例数据,我只会返回两行,即: 如前所述,只有与字符串“ Read Only”或“ re
问题内容: 我有一个机器人脚本,该脚本可以从sql文件中插入一些sql语句;其中一些语句包含utf8字符。如果我使用navicat工具将此文件手动插入数据库,一切都很好。但是,当我尝试使用机器人框架的数据库库执行此文件时,utf8字符会发疯! 这是我的utf8包含的sql语句: 这是我使用数据库库的方式: 这是我在数据库中得到的: 我尝试直接使用执行SQL文件,但仍然失败!原始库中似乎有问题。这是
通常,人们会在打印输出(数据帧)时询问堆栈溢出问题。如果有一种方法可以将数据帧数据快速加载到对象中,那么这是很方便的。 从数据帧字符串(可能格式正确,也可能格式不正确)加载数据帧的最有建议的方法是什么? 如果要将以下字符串作为数据帧加载,您会怎么做? 此类型与您在文件中找到的更相似。 注意:以下两个链接不涉及示例-1中提出的具体情况。我认为我的问题不是重复的原因是,我认为不能使用已经发布在这些链接
这是主活动中的数组 这是我想要将该列表加载到片段中的onclick方法。 我有许多字符串数组,希望为菜单中的每个按钮分配一个。现在我应该把这个代码放在哪里?