如何加载大量字符串以与Oracle数据库匹配?

如何加载大量字符串以与Oracle数据库匹配?

我目前正在学习PL/SQL,所以我仍然是一个新手。假设您有一个生产数据库,您可以使用Oracle SQL Developer连接到该数据库。您只读取了该数据库的权限。因此,您不能创建或编辑任何表。

我的问题是,如果我有一个很大的ID列表,我必须加入数据库中的一个表,我怎么能这样做呢?

显然,我可以将ID加载到临时表中,然后执行联接,但这将非常繁琐,因为我只有读取权限。硬编码ID也不是一个选项,因为列表太大了。

还请注意,我知道临时表的概念。但不幸的是,我也没有创建这些的特权。

在SQLDeveloper中有什么解决方案可以加载ID列表,以便与数据库中的表匹配吗?


素胚勾勒不出你
浏览 673回答 3
3回答

桃花长相依

使用集合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);         }     }}

慕少森

您可以尝试通过构建如下查询来执行搜索:SELECT * FROM YourTable WHERE ID IN (Id1, Id2, ...., Idn)这是限制在1000个ID,但它可以绕过使用这个小技巧显示。这里.
打开App,查看更多内容
随时随地看视频慕课网APP