How to use DBFS PL/SQL API

Hi guys,
I'm re-posting this question to see if anyone can help me out. I am trying to use the DBFS PL/SQL API to manipulate files stored in DBFS.
Environment details:
Windows 7 or OEL 5.5 (I have tried both platforms)
Database: Oracle DB EE 11.2.0.2
IDE: SQLDeveloper on Windows 7
I have two users, DBFS_USER who owns the DBFS store and MYUSER who connects to the store to manipulate files using the DBFS PL/SQL API.
Creation scripts:
connect / as sysdba;
CREATE TABLESPACE dbfs_ts DATAFILE 'D:\oracle\oradata\orcl\dbfs01.dbf' SIZE 1M AUTOEXTEND ON NEXT 1M;
-- create users
create user dbfs_user identified by dbfs_user default tablespace dbfs_ts quota unlimited on dbfs_ts;
create myuser identified by myuser;
-- grant role
GRANT CREATE SESSION, RESOURCE, CREATE VIEW, DBFS_ROLE, CREATE TABLE TO dbfs_user;
GRANT CREATE SESSION, RESOURCE, CREATE VIEW, DBFS_ROLE, CREATE TABLE TO myuser;
-- create file system (as DBFS_USER)
connect dbfs_user/dbfs_user;
exec dbms_dbfs_sfs.createFilesystem('STAGING_AREA_FS');
exec dbms_dbfs_content.registerStore('STAGING_AREA_FS', 'posix', 'DBMS_DBFS_SFS');
exec dbms_dbfs_content.mountStore('STAGING_AREA_FS', 'staging_area');
commit;
-- export store STAGING_AREA_FS (as DBFS_USER)
exec dbms_dbfs_sfs.exportFilesystem('STAGING_AREA_FS');
-- check table names (as MYUSER)
connect myuser/myuser;
-- should see nothing (no mounts)
select * from table(dbms_dbfs_content.listMounts);
-- note down the table_name
select * from table(dbms_dbfs_sfs.listTables);
-- mount as MYUSER (example with table_name SFS$_FST_32)
exec dbms_dbfs_sfs.registerFilesystem('MYUSER_FS', 'DBFS_USER', 'SFS$_FST_32');
exec dbms_dbfs_content.registerStore('MYUSER_FS', 'posix', 'DBMS_DBFS_SFS');
exec dbms_dbfs_content.mountStore('MYUSER_FS', 'staging_area');
commit;
-- check mount (as MYUSER)
select * from table(dbms_dbfs_content.listMounts);
select pathname from dbfs_content;
CREATE STORED PROC (as MYUSER)
CREATE OR REPLACE PACKAGE MYUSER_PKG IS
Function CreateDirectory
(P_File_Path          IN VARCHAR2,
P_ErrMsg          OUT VARCHAR2)
return Number;
END MYUSER_PKG ;
CREATE OR REPLACE PACKAGE BODY MYUSER_PKG IS
Function CreateDirectory
(P_File_Path          IN VARCHAR2,
P_ErrMsg          OUT VARCHAR2)
return Number
IS
l_Return NUMBER;
l_props DBMS_DBFS_CONTENT.PROPERTIES_T;
BEGIN
l_Return := 0;
DBMS_DBFS_CONTENT.createDirectory (
path     => P_File_Path,
properties     => l_props);
RETURN l_Return;
EXCEPTION
WHEN OTHERS THEN
l_Return := NVL(SQLCODE, -1);
P_ErrMsg := SQLERRM;
RETURN l_Return;
END CreateDirectory;
END MYUSER_PKG ;
When compiling the package, I am getting this error:
Error(9,11): PLS-00201: identifier 'DBMS_DBFS_CONTENT' must be declared
Error(9,11): PL/SQL: Item ignored
Error(13,3): PL/SQL: Statement ignored
Error(15,19): PLS-00320: the declaration of the type of this expression is incomplete or malformed
How do I solve the problem in the error message? I'm not a DB expert. I used this reference documentation: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294/adlob_client.htm#CIHDEJAA
Thanks in advance.
Cappa

You need to grant directly the privileges from DBFS_ROLE because roles are not enabled in stored PL/SQL:
SQL> select* from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Solaris: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
SQL> show user
USER is "SYS"
SQL>
SQL> create user myuser identified by myuser;
User created.
SQL> GRANT CREATE SESSION, RESOURCE, CREATE VIEW, DBFS_ROLE, CREATE TABLE TO myuser;
Grant succeeded.
SQL>
SQL> begin
  2  for x in (select privilege, table_name
  3           from dba_tab_privs
  4           where grantee='DBFS_ROLE')
  5  loop
  6   execute immediate 'grant ' || x.privilege || ' on ' || x.table_name
  7   || ' to myuser ';
  8  end loop;
  9  end;
10  /
begin
ERROR at line 1:
ORA-22812: cannot reference nested table column's storage table
ORA-06512: at line 6
SQL>
SQL> connect myuser/myuser
Connected.
SQL>
SQL> CREATE OR REPLACE PACKAGE MYUSER_PKG IS
  2  Function CreateDirectory
  3  (P_File_Path IN VARCHAR2,
  4  P_ErrMsg OUT VARCHAR2)
  5  return Number;
  6  END MYUSER_PKG ;
  7  /
Package created.
SQL> show errors
No errors.
SQL>
SQL> CREATE OR REPLACE PACKAGE BODY MYUSER_PKG  IS
  2  Function CreateDirectory
  3  (P_File_Path IN VARCHAR2,
  4  P_ErrMsg OUT VARCHAR2)
  5  return Number
  6  IS
  7  l_Return NUMBER;
  8  l_props DBMS_DBFS_CONTENT.PROPERTIES_T;
  9  BEGIN
10  l_Return := 0;
11  DBMS_DBFS_CONTENT.createDirectory (
12  path => P_File_Path,
13  properties => l_props);
14  RETURN l_Return;
15  EXCEPTION
16  WHEN OTHERS THEN
17  l_Return := NVL(SQLCODE, -1);
18  P_ErrMsg := SQLERRM;
19  RETURN l_Return;
20  END CreateDirectory;
21  END MYUSER_PKG ;
22  /
Package body created.
SQL> show errors
No errors.You would need to check why some GRANT statement fails if you have other issue with other piece of code.

Similar Messages

  • Issue using the DBFS PL/SQL API

    Hi guys,
    I'm trying to use the DBFS PL/SQL APIs and create some simple functions that for example return the file size or move a file to a different path. I created a user DBFS_USER and granted DBFS_ROLE to that user. Using SQLDeveloper, when I run the following code, it works fine:
    SET SERVEROUTPUT ON
    DECLARE
    l_props DBMS_DBFS_CONTENT_PROPERTIES_T;
    l_prp dbms_dbfs_content_property_t;
    l_blob BLOB;
    l_item_type INTEGER;
    BEGIN
    DBMS_DBFS_CONTENT.getPath (
    path => '/staging_area/test_dir/IAMDBFS_USER.txt',
    properties => l_props,
    content => l_blob,
    item_type => l_item_type);
    FOR x in 1..l_props.count LOOP
    l_prp := l_props(x);
    if (l_prp.propname = 'std:length') then
    DBMS_OUTPUT.put_line(l_prp.propname || ' : ' || l_prp.propvalue);
    end if;
    END LOOP;
    END;
    However, when I try to put it in a package, I get the error message "Error(415,10): PLS-00201: identifier 'DBMS_DBFS_CONTENT_PROPERTY_T' must be declared" while trying to compile. This is what my package and its body looks like:
    create or replace
    PACKAGE MY_DBFS_PKG IS
    Function GetFileLength
    (P_FILE_PATH IN Varchar2
    ,P_ErrMsg OUT Varchar2)
    Return Number;
    END MY_DBFS_PKG
    Body:
    create or replace
    PACKAGE BODY MY_DBFS_PKG IS
    FUNCTION GetFileLength(
    P_FILE_PATH IN VARCHAR2 ,
    P_ErrMsg OUT VARCHAR2)
    RETURN NUMBER
    IS
    l_return NUMBER;
    l_props DBMS_DBFS_CONTENT_PROPERTIES_T;
    l_prop DBMS_DBFS_CONTENT_PROPERTY_T;
    l_blob BLOB;
    l_item_type INTEGER;
    BEGIN
    l_Return := 0;
    P_ErrMsg := NULL;
    DBMS_DBFS_CONTENT.getPath ( path => p_file_path, properties => l_props, content => l_blob, item_type => l_item_type);
    FOR x IN 1..l_props.count
    LOOP
    l_prop := l_props(x);
    IF (l_prop.propname = 'std:length') THEN
    l_Return := l_prop.propvalue;
    EXIT;
    END IF;
    END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    l_Return := NVL(SQLCODE, -1);
    p_ErrMsg := SQLERRM;
    RETURN l_return;
    END GetFileLength;
    END MY_DBFS_PKG;
    Am I missing an extra grant somewhere? Or have I missed a declaration in the package or package body?
    I am not a DB person so pardon the probably inefficient loop to find the length or wrong declaration somewhere. I'm open to suggestions/recommendations but want to use the DBFS PL/SQL API as I need other functions out of it.
    Thanks very much in advance.
    Cappa

    Hi guys,
    I'm trying to use the DBFS PL/SQL APIs and create some simple functions that for example return the file size or move a file to a different path. I created a user DBFS_USER and granted DBFS_ROLE to that user. Using SQLDeveloper, when I run the following code, it works fine:
    SET SERVEROUTPUT ON
    DECLARE
    l_props DBMS_DBFS_CONTENT_PROPERTIES_T;
    l_prp dbms_dbfs_content_property_t;
    l_blob BLOB;
    l_item_type INTEGER;
    BEGIN
    DBMS_DBFS_CONTENT.getPath (
    path => '/staging_area/test_dir/IAMDBFS_USER.txt',
    properties => l_props,
    content => l_blob,
    item_type => l_item_type);
    FOR x in 1..l_props.count LOOP
    l_prp := l_props(x);
    if (l_prp.propname = 'std:length') then
    DBMS_OUTPUT.put_line(l_prp.propname || ' : ' || l_prp.propvalue);
    end if;
    END LOOP;
    END;
    However, when I try to put it in a package, I get the error message "Error(415,10): PLS-00201: identifier 'DBMS_DBFS_CONTENT_PROPERTY_T' must be declared" while trying to compile. This is what my package and its body looks like:
    create or replace
    PACKAGE MY_DBFS_PKG IS
    Function GetFileLength
    (P_FILE_PATH IN Varchar2
    ,P_ErrMsg OUT Varchar2)
    Return Number;
    END MY_DBFS_PKG
    Body:
    create or replace
    PACKAGE BODY MY_DBFS_PKG IS
    FUNCTION GetFileLength(
    P_FILE_PATH IN VARCHAR2 ,
    P_ErrMsg OUT VARCHAR2)
    RETURN NUMBER
    IS
    l_return NUMBER;
    l_props DBMS_DBFS_CONTENT_PROPERTIES_T;
    l_prop DBMS_DBFS_CONTENT_PROPERTY_T;
    l_blob BLOB;
    l_item_type INTEGER;
    BEGIN
    l_Return := 0;
    P_ErrMsg := NULL;
    DBMS_DBFS_CONTENT.getPath ( path => p_file_path, properties => l_props, content => l_blob, item_type => l_item_type);
    FOR x IN 1..l_props.count
    LOOP
    l_prop := l_props(x);
    IF (l_prop.propname = 'std:length') THEN
    l_Return := l_prop.propvalue;
    EXIT;
    END IF;
    END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    l_Return := NVL(SQLCODE, -1);
    p_ErrMsg := SQLERRM;
    RETURN l_return;
    END GetFileLength;
    END MY_DBFS_PKG;
    Am I missing an extra grant somewhere? Or have I missed a declaration in the package or package body?
    I am not a DB person so pardon the probably inefficient loop to find the length or wrong declaration somewhere. I'm open to suggestions/recommendations but want to use the DBFS PL/SQL API as I need other functions out of it.
    Thanks very much in advance.
    Cappa

  • How to use views in sql script report?

    All all
    Can any one tell how to use views in sql script report?

    Most of the views are based on tables (or other views which are based on tables).
    The view typically shows one org at a time based on the context that is set.
    If you need records for all orgs, you need to use the underlying tables. Oracle typically names the tables with a _all suffix.
    e.g. PO_HEADERS will show records for one org at a time. PO_HEADERS_ALL will show records for all orgs.
    Hope this answers your question,
    Sandeep Gandhi

  • How to use the Public Java API

    Is it possible to use the Public Java API to write a custom transformation in Java and use this in OWB. i.e. Say I have a Dateofbirth field in my source database and an Agegroup field in the target database, and I write a transformation in Java to take the Dateofbirth as an input parameter to the method and calculate the Agegroup e.g. 25-30, and return it from this method which then populates the Agegroup field in the target database. If so, how do I go about this?

    Martin,
    In general, yes you could... but you do not need to. You could use the UI to implement this requirement. The public Java API is there for you to manipulate metadata. How you implement your system, is independent of that.
    The way you would go about the case you just mentioned... you would write the Java code, deploy it into the database, wrap it in a PL/SQL procedure or function, and call it from OWB.
    Would this be a good idea...? I think no. Unless you have very complicated calculations that can only be performed in Java, I strongly encourage you use the PL/SQL language. Reason being: transformation will be much faster, because there is no need to translate PL/SQL into Java and back again.
    Hope this helps,
    Mark.

  • Choosing particular columns using XSU PL/SQL API

    Hi ya,
    I have another query regarding XSU PL/SQL API please
    If I dont want to choose all columns but choose particular columns
    in my select clause,how shud I do this.??
    I havent used XSU before,so please forgive my ignorance.
    declare
    queryCtx DBMS_XMLQuery.ctxType;
    result CLOB;
    begin
    -- set the query context.
    queryCtx := DBMS_XMLQuery.newContext('select CHOOSE CERTAIN COLS ONLY from <TABLE>');
    result := DBMS_XMLQuery.getXML(queryCtx); -- get the result
    DBMS_XMLQuery.closeContext(queryCtx); -- close the query handle;
    end;
    Can anyone tell me how to select particulat columnsor some one suggested(Mr Kishore) to use a view?
    I dont want to use 'Select * from <Table>'
    Help really appreciated.
    Rgds

    This is a duplicate of this posting Creating a View to check for 2 conditions.. This is a particularly heinous case because some of our finest minds have already responded in that thread.
    Lose ten culture points.
    Regards, APC

  • Anyone know how to use Exchange Web Service API in PB Classic 12.5

    Trying to figure out how to use the api/dll's of the EWS.  I am new to web services in pb so I seem to be going nowhere fast.  If you have used it I would appreciate some guidance or better yet code/instruction on how to use/access it/setup.  I need to be able to get to exchange (in this case using an office365 test account) and read emails/calendar info etc..
    Thanks for any help..
    Dave V.

    Hi Matt,
    I find an article about Overlay a SharePoint calendar with a calendar from Exchange or SharePoint, for your reference:
    https://support.office.microsoft.com/en-us/article/Overlay-a-SharePoint-calendar-with-a-calendar-from-Exchange-or-SharePoint-4caebe59-3994-4a94-9322-b31abb8a5e9a?CorrelationId=0cba4045-24cb-4cb2-b6d6-51e4015df3a0&ui=en-US&rs=en-US&ad=US
    However, if you want to use SQL Queries and HTML, please contact to Exchange Development Team to get more professional advice.
    Best Regards,
    Allen Wang

  • How to use property file - sql query define in property file

    Hi All,
    Anybody please tell me how to use property file.
    I have placed sql query in propery file and I have to access this in my file.
    well so far this is my code but don't know how to implement in the following ...
    pstmt = con.prepareStatement("select * from registration where username=?");
    instead of writting the query I want to use the property file.
    so far I have developed the following code...
    FileInputStream fis = new FileInputStream("querysql.property");
    Properties dbProp = new Properties();
    dbProp.load(fis);is the code correct... or is there another way to access property file
    Please help.
    please reply soon....
    Thanks

    Before answering, check if it's already been done here http://www.jguru.com/forums/view.jsp?EID=1304182

  • How to use the generated SQL of "Recommendation"

    Dear Experts,
    I am using KXEN recommendation function. After trained the model, I expose the result in form of HANA SQL. However, I am really have no idea how to make this SQL runnable because there are some subqueries like:
    FROM $Dataset "SPACEIN"
      LEFT OUTER JOIN (SELECT * FROM  WHERE "GRAPH_NAME" = 'Transactions') "PRODUCTS" ON ("PRODUCTS"."KXNODEFIRST" = "SPACEIN".MemberID)
      LEFT OUTER JOIN (SELECT * FROM  WHERE "GRAPH_NAME" = 'Product') "RULES" ON ("PRODUCTS"."KXNODESECOND" = "RULES"."KXNODESECOND")
      LEFT OUTER JOIN (SELECT * FROM  WHERE "GRAPH_NAME" = 'Transactions') "NOTIN" ON ("RULES"."KXNODESECOND_2" = "NOTIN"."KXNODESECOND") AND ("NOTIN"."KXNODEFIRST" = "SPACEIN".MemberID)
    Please pay attention to the red parts. While $Dataset, I assume it should be the data source which is used to train the model, but how to handle the "GRAPH" parts(the next 3 subqueries)? There are something missing after "FROM" clause, what should I fill in here? why the XKEN will generate sucn incomplete codes?
    Thanks for your help!

    Hi Richard,
    To apply a recommendation model, you first need to save your model in your database. (saving the model in the database for such models and for what you want to do is mandatory).
    Once you saved it, you will see many tables starting with "Kx" : KxInfos, KxLinks, KxNodes...
    These tables contains information on the nodes available in the data used, on the links between products.
    Now, if you generate the SQL code for Hana, the name of your KxLinks table should now be used in the SQL code.
    When prompted for $Dataset and $Key, you should specify in place of $Dataset the name of the table on which you want to apply your model. In place of $Key, you should enter the name of the key of this table (e.g. UserId).
    In my case $Dataset =>KAR_UniqueCustomers and $Key=>UserID
    My generated code looks like this :
    FROM KAR_UniqueCustomers "SPACEIN"
    LEFT OUTER JOIN (SELECT * FROM KxLinks1 WHERE "GRAPH_NAME" = 'Transactions') "PRODUCTS" ON ("PRODUCTS"."KXNODEFIRST" = "SPACEIN".UserID)
    LEFT OUTER JOIN (SELECT * FROM KxLinks1 WHERE "GRAPH_NAME" = 'ItemPurchased') "RULES" ON ("PRODUCTS"."KXNODESECOND" = "RULES"."KXNODESECOND")
    Note that your application table must contain:
    - A column with the same name as your users identifier in the training dataset. It contains the list of distinct users (stricly 1 row for each customer id)
    - A column with the same name as your products name in the training dataset. It can contain the name of the same product for all customers.
    I hope you'll make it work !
    Armelle

  • How to use PHP with SQL?

    how to use sql in php and output a new ERP table contains every order_number, every order_quantity and so on then ouput sum of company and then sum of area
    and so on.
    now i only know a little how to use sql in php and you can give some examples of this?

    This sounds like a nice little homework exercise.
    Check the PHP FAQs for Oracle/PHP help
    http://www.oracle.com/technology/tech/php/htdocs/php_faq.html
    http://www.oracle.com/technology/tech/php/htdocs/php_troubleshooting_faq.html
    For SQL help, check http://asktom.oracle.com/
    -- cj

  • How to use SP_transaction_notification in SQL to provide SAP warnings?

    Hi Guys,
    I use SP_transaction_notification in SQL to block certain event and give error messages on sap screens.  Anyone knows how to provide a warning only using the same technique?
    For example if a user doesn't enter customer reference number on a order , can you provide a warning?
    Thanks

    Hi,
    As an addt. info, this link seems unavailable :
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid /53cefa6a-0a01-0010-cd8e-e7c189cb6519
    I've tested it after browsing the link.
    Rgds,

  • IaaS SQL/VM - how to use an existing SQL VM

    Hello
    I have a Cloud Service with a Window Web VM and SQL VM. They both are on the same Vnet. Now I want to add a DB using the existing SQL VM. But this VM does not show up of the Server drop down menu in "Specify Database setting"
    wizard. What am I missing here?
    If I let the DB Wizard add a new server (leveraging PaaS offer for SQL DB), how can I make sure that this new server shows up on my Vnet (the same one where I have Web VM on)? I assume that these VMs needs to be on the same Vnet to be able to communicate
    with each other. 
    Thanks in advance for your help

    Hello,
    It seems that you had mix up Windows Azure SQL database with SQL Server on Azure VM. When you create a SQL Server virtual machine in Azure, it similar to on-premises SQL Server installed on VM. You can create and manage databases with SSMS.
    If you create a SQL database on Management Portal, the SQL database server host a VM of the datacenter, you cannot using the existing SQL Server VM which your created yourself.
    When connect to the SQL database from your azure VM which hosted on Cloud Service, there is no need to create a virtual network, just configure the firewall rule of the SQL database server to allow connection from Windows
    Azure Serivces.
    Reference: How to: Configure the Server-Level Firewall Settings (Azure SQL Database)
    Regards,
    Fanny Liu
    Fanny Liu
    TechNet Community Support

  • How to use the java native api

    i am new to the java native api, can anyone tell me how to use it in order for me to use the c++ file in the java file?please explain it if possible, thanks

    Try this out to learn the basics :
    http://java.sun.com/docs/books/tutorial/native1.1/index.html
    You can't go wrong from there.

  • How to use Java Data Mining API(JDM)

    hello,
    i have downloaded the JDM API(dmapi-1_0_1-fr-spec.zip) from JSR 000073. In the Readme.txt file, I have read that the components required to use the API are jdm.jar and jdmtck.jar.
    But these two files didnot come with the above zip file. The zip file contained other zip files namely RI.zip, TCK.zip, Spec.zip, etc.
    If somebody knows how to use this API, please please let me know
    My personal email ID: [email protected]

    Even I am not able to understand how to use it. How useful is the JDM API to make a new algorithm?
    Thank you,
    Arunraj

  • How tu use or install package API Toolkit BPC

    Dear All,,,
    I have problem with performance SAP BPC, then i read SAP Note from SAP Support Portal. In that document, there are download API toolkit. I don't understand how to use this file (API Toolkit)...??
    Any Idea..??
    Thanks...
    Dharma Setiadi

    The reflow plug-in is installed by default when you install Reader. In order for it to work optimally, the document should be correctly tagged, which is something you can do in Acrobat. To activate Reflow in Reader X, select: View > Zoom > Reflow

  • How to use advanced PL/SQL concepts in oracle forms/reports

    Hi all,
    Can any one suggest me how to use the advanced PL/SQL Concepts(nested tables,PAA,Varrays,Objects...) in Oracle forms.
    Actually i Created a Table having column of Varray datatype. now i want to create a item in oracle forms on this field. can any one suggest me the way to do this.
    Thanks,
    Kumar

    Hello,
    Have a look at this one:
    http://sheikyerbouti.developpez.com/tutoforms10g/tutoforms10g.htm
    particularly the chapter about block that contain a collection (2.3.3). The sample is built around a nested table but you have the idea to adapt it to work with a varray.
    Kind regards,
    Alex
    If someone's answer is helpful or correct please mark it accordingly.

Maybe you are looking for

  • PCI-e driver required?

    I have a new MSI G31 mobo with an E7400 processor which I now have operational. After installing my first PCI-e card (a GeForce 8400 graphics adapter) the device was not recognized. Before returning this card I was wondering where the drivers for the

  • Checking plugins - Unknown Plugin - Research - 404 File Not Found

    Checking plugin status, two are listed as "Unknown Plugin" The buttons offering to research them result in a 404 File Not Found. The buttons link to[[ https://www.mozilla.org/en-US/plugincheck/null]] which comes up with: Whoops! What are you doing he

  • Migo_gr & other is migo

    I i want to investigate one thing for my user exit ,There are two t.codes for MIGO ,one is migo_gr & other is migo, I want to check whether the user has used t.code MIGO OR migo _gr, how it can be checked please let me know Edited by: Sameer.S on Jan

  • Can You Hear the Difference?

    Seriously. I can hear the difference between 16 bit and 24 bit and 44.1 and 48kHz. I recorded the same acoustic guitar part through a Line6 PodXT Pro this evening at 96kHz and 48kHz, both at 24 bit - I can't hear it. I can crank it and of course I lo

  • Linking photoshop image to illustrator

    link a Photoshop image to Illustrator, the value of the colours in the image change. saving the file as an EPS for print, the colour is still wrong. However, if embed the image, the colour values change to what they should be, their value as they wer