第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何加載大量字符串以與Oracle數(shù)據(jù)庫匹配?

如何加載大量字符串以與Oracle數(shù)據(jù)庫匹配?

素胚勾勒不出你 2019-07-04 17:54:30
如何加載大量字符串以與Oracle數(shù)據(jù)庫匹配?我目前正在學(xué)習(xí)PL/SQL,所以我仍然是一個新手。假設(shè)您有一個生產(chǎn)數(shù)據(jù)庫,您可以使用Oracle SQL Developer連接到該數(shù)據(jù)庫。您只讀取了該數(shù)據(jù)庫的權(quán)限。因此,您不能創(chuàng)建或編輯任何表。我的問題是,如果我有一個很大的ID列表,我必須加入數(shù)據(jù)庫中的一個表,我怎么能這樣做呢?顯然,我可以將ID加載到臨時表中,然后執(zhí)行聯(lián)接,但這將非常繁瑣,因為我只有讀取權(quán)限。硬編碼ID也不是一個選項,因為列表太大了。還請注意,我知道臨時表的概念。但不幸的是,我也沒有創(chuàng)建這些的特權(quán)。在SQLDeveloper中有什么解決方案可以加載ID列表,以便與數(shù)據(jù)庫中的表匹配嗎?
查看完整描述

3 回答

?
桃花長相依

TA貢獻(xiàn)1860條經(jīng)驗 獲得超8個贊

使用集合

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);
        }
    }}


查看完整回答
反對 回復(fù) 2019-07-04
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊

您可以嘗試通過構(gòu)建如下查詢來執(zhí)行搜索:

SELECT * FROM YourTable WHERE ID IN (Id1, Id2, ...., Idn)

這是限制在1000個ID,但它可以繞過使用這個小技巧顯示。這里.


查看完整回答
反對 回復(fù) 2019-07-04
  • 3 回答
  • 0 關(guān)注
  • 722 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號